Elixir: REST API এবং WebSockets ডেভেলপমেন্ট
Elixir তে REST API এবং WebSockets ডেভেলপমেন্ট একটি শক্তিশালী এবং স্কেলেবল ওয়েব অ্যাপ্লিকেশন তৈরি করার জন্য খুবই গুরুত্বপূর্ণ। Elixir তে ওয়েব ডেভেলপমেন্টের জন্য জনপ্রিয় ফ্রেমওয়ার্ক Phoenix ব্যবহার করা হয়, যা REST API এবং WebSockets এর জন্য পূর্ণাঙ্গ সমাধান প্রদান করে।
এখানে Phoenix এর মাধ্যমে REST API এবং WebSockets তৈরি করার প্রক্রিয়া এবং এই দুটি প্রযুক্তি ব্যবহারের সুবিধা নিয়ে আলোচনা করা হবে।
1. REST API ডেভেলপমেন্ট (Phoenix Framework ব্যবহার করে)
REST (Representational State Transfer) API হল ওয়েব সার্ভিসের একটি জনপ্রিয় ডিজাইন আর্কিটেকচার। এটি HTTP প্রটোকলের উপর ভিত্তি করে কাজ করে এবং বিভিন্ন ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা আদান-প্রদান করতে ব্যবহৃত হয়। Elixir তে Phoenix Framework ব্যবহার করে REST API তৈরি করা যায়।
Phoenix এ REST API তৈরি করা:
প্রজেক্ট তৈরি করা:
প্রথমে, একটি নতুন Phoenix অ্যাপ্লিকেশন তৈরি করতে হবে। এটি REST API ডেভেলপমেন্টের জন্য প্রস্তুত করা হবে।mix phx.new my_api --no-html --no-assets cd my_apiডিপেনডেন্সি ইনস্টল করা:
পরবর্তী পদক্ষেপে ডিপেনডেন্সি ইনস্টল করতে হবে।mix deps.getRouter কনফিগারেশন:
REST API এর জন্য router.ex ফাইলে রুট (routes) ডিফাইন করতে হবে। উদাহরণস্বরূপ, একটিUserControllerতৈরি করা যেতে পারে যাGET,POST,PUT,DELETEHTTP মেথডের মাধ্যমে ইউজার সম্পর্কিত ডেটা পরিচালনা করবে।router.ex:
scope "/api", MyApiWeb do pipe_through :api get "/users", UserController, :index get "/users/:id", UserController, :show post "/users", UserController, :create put "/users/:id", UserController, :update delete "/users/:id", UserController, :delete endController তৈরি করা:
একটিUserControllerতৈরি করা হবে যা HTTP রিকোয়েস্টগুলোর সাথে সম্পর্কিত কার্যক্রম সম্পাদন করবে।user_controller.ex:
defmodule MyApiWeb.UserController do use MyApiWeb, :controller def index(conn, _params) do users = [%{id: 1, name: "Alice"}, %{id: 2, name: "Bob"}] json(conn, users) end def show(conn, %{"id" => id}) do user = %{id: id, name: "Alice"} json(conn, user) end def create(conn, %{"name" => name}) do user = %{id: 3, name: name} json(conn, user) end def update(conn, %{"id" => id, "name" => name}) do user = %{id: id, name: name} json(conn, user) end def delete(conn, %{"id" => id}) do json(conn, %{status: "deleted", id: id}) end end- JSON রেসপন্স প্রদান:
সমস্ত রেসপন্স JSON ফরম্যাটে প্রদান করা হবে।json/2ফাংশনটি JSON রেসপন্স প্রদান করতে ব্যবহৃত হয়। API টেস্টিং:
API টেস্ট করতে Postman অথবা curl ব্যবহার করতে পারেন। উদাহরণস্বরূপ, একটি GET রিকোয়েস্ট পাঠাতে:curl http://localhost:4000/api/users
2. WebSockets ডেভেলপমেন্ট (Phoenix Channels ব্যবহার করে)
WebSockets হল একটি প্রোটোকল যা ক্লায়েন্ট এবং সার্ভারের মধ্যে ডুয়াল-ডিরেকশনাল যোগাযোগ (bi-directional communication) স্থাপন করতে সাহায্য করে। এটি রিয়েল-টাইম অ্যাপ্লিকেশন যেমন চ্যাট অ্যাপ, লাইভ আপডেট ইত্যাদি তৈরিতে ব্যবহৃত হয়। Elixir তে Phoenix Channels WebSockets এর জন্য ব্যবহৃত হয়।
Phoenix এ WebSockets (Channels) তৈরি করা:
Channel কনফিগারেশন:
Phoenix Channels তৈরি করতে channel.ex ফাইল ব্যবহার করতে হয়। এখানে, একটি চ্যাট চ্যানেল তৈরি করা হবে যা ক্লায়েন্টদের মধ্যে বার্তা প্রেরণ করতে সক্ষম।chat_channel.ex:
defmodule MyApiWeb.ChatChannel do use Phoenix.Channel def join("chat:lobby", _message, socket) do {:ok, socket} end def handle_in("new_msg", %{"body" => body}, socket) do broadcast!(socket, "new_msg", %{body: body}) {:noreply, socket} end endএখানে,
handle_inফাংশনটি চ্যাটে নতুন মেসেজ আসলে তা বাকি সবার কাছে পাঠানোর দায়িত্ব পালন করবে।Router কনফিগারেশন:
Channels ব্যবহার করতে হলে,router.exফাইলে চ্যানেল রুট কনফিগার করতে হবে।router.ex:
socket "/socket", MyApiWeb.UserSocket, websocket: true, longpoll: falseUserSocket তৈরি করা:
চ্যানেলটি একটিUserSocketএর মাধ্যমে সংযুক্ত হবে, যা websocket এবং longpoll প্রোটোকল সমর্থন করবে।user_socket.ex:
defmodule MyApiWeb.UserSocket do use Phoenix.Socket channel "chat:lobby", MyApiWeb.ChatChannel def connect(_params, socket, _connect_info) do {:ok, socket} end def id(_socket), do: nil endJavaScript এ WebSocket সংযোগ করা:
Phoenix তে চ্যানেল ব্যবহারের জন্য ক্লায়েন্ট সাইডে JavaScript লিখতে হবে।app.js:
import { Socket } from "phoenix" let socket = new Socket("/socket", { params: { user_id: 123 } }) socket.connect() let channel = socket.channel("chat:lobby", {}) channel.on("new_msg", payload => { console.log("New message:", payload.body) }) channel.join() .receive("ok", resp => { console.log("Joined successfully", resp) }) .receive("error", resp => { console.log("Unable to join", resp) }) // Send message channel.push("new_msg", { body: "Hello, World!" })- Testing the WebSocket:
Phoenix Server চালু করুন:
mix phx.server- ব্রাউজারে বা JavaScript কনসোল থেকে চ্যানেলে মেসেজ পাঠানো এবং গ্রহণ করা পরীক্ষা করুন।
সারসংক্ষেপ
REST API এবং WebSockets Elixir তে Phoenix Framework ব্যবহার করে তৈরি করা সহজ। Phoenix ডেভেলপারদের দ্রুত এবং স্কেলেবল API এবং রিয়েল-টাইম ওয়েব অ্যাপ্লিকেশন তৈরি করতে সাহায্য করে।
- REST API তৈরি করতে, আপনি Phoenix Controller ব্যবহার করে HTTP রিকোয়েস্টের মাধ্যমে ডেটা আদান-প্রদান করতে পারেন।
- WebSockets (Phoenix Channels) ব্যবহার করে রিয়েল-টাইম যোগাযোগ ব্যবস্থা তৈরি করতে পারেন, যা ক্লায়েন্টদের মধ্যে ডুয়াল-ডিরেকশনাল যোগাযোগ স্থাপন করে।
এটি স্কেলেবল এবং ফাল্ট-টলারেন্ট সিস্টেম তৈরি করার জন্য একটি শক্তিশালী সমাধান প্রদান করে, যা Elixir এবং Phoenix এর প্রকৃত সুবিধা।
Read more