API সার্ভার তৈরি

স্কালা রিয়েল-ওয়ার্ল্ড প্রজেক্ট উদাহরণ - স্কালা প্রোগ্রামিং (Scala Programming) - Computer Programming

317

একটি API সার্ভার তৈরি করার জন্য, আমরা Play Framework ব্যবহার করতে পারি যা স্কালার জন্য একটি শক্তিশালী ওয়েব ফ্রেমওয়ার্ক। এটি HTTP সার্ভার তৈরি করতে সহায়তা করে এবং RESTful API তৈরি করা সহজ করে তোলে।

এই গাইডে, আমরা একটি সাধারণ REST API সার্ভার তৈরি করব যা একটি সিম্পল API এনডপয়েন্টকে সার্ভ করবে।

১. Play Framework প্রোজেক্ট সেটআপ

১.১ SBT ব্যবহার করে নতুন Play প্রোজেক্ট তৈরি করা

Play Framework-এর একটি নতুন প্রোজেক্ট তৈরি করার জন্য, আপনি sbt ব্যবহার করতে পারেন। প্রথমে একটি নতুন ফোল্ডার তৈরি করুন এবং সেখানে Play প্রোজেক্ট তৈরি করুন।

sbt new playframework/play-scala-seed.g8

এটি একটি নতুন Scala Play প্রোজেক্ট তৈরি করবে, যেখানে আপনার API সার্ভার তৈরি করতে পারবেন।

১.২ প্রোজেক্ট ফোল্ডার স্ট্রাকচার

Play প্রোজেক্টের স্ট্রাকচার হবে:

my-api-server/
  ├── build.sbt            # SBT কনফিগারেশন ফাইল
  ├── project/             # SBT প্রোজেক্ট কনফিগারেশন
  ├── app/                 # কোড, কন্ট্রোলার, ভিউ ইত্যাদি
  ├── conf/                # কনফিগারেশন ফাইল
  └── public/              # স্ট্যাটিক ফাইল

২. API এনডপয়েন্ট তৈরি করা

Play Framework-এ API এনডপয়েন্ট তৈরি করতে, কন্ট্রোলার তৈরি করতে হয় এবং প্রতিটি কন্ট্রোলার একটি HTTP রিকোয়েস্ট হ্যান্ডেল করে।

২.১ কন্ট্রোলার তৈরি করা

আমরা একটি সিম্পল User API তৈরি করব যেখানে একটি ইউজারের তথ্য রিটার্ন হবে।

প্রথমে app/controllers/ ফোল্ডারে UserController.scala নামক একটি নতুন ফাইল তৈরি করুন।

package controllers

import play.api.mvc._

class UserController(cc: ControllerComponents) extends AbstractController(cc) {

  // GET /api/users
  def getUsers() = Action {
    Ok("""[{"id":1, "name": "Alice"}, {"id":2, "name": "Bob"}]""").as("application/json")
  }

  // GET /api/users/:id
  def getUser(id: Int) = Action {
    if (id == 1) {
      Ok("""{"id":1, "name": "Alice"}""").as("application/json")
    } else if (id == 2) {
      Ok("""{"id":2, "name": "Bob"}""").as("application/json")
    } else {
      NotFound(s"User with id $id not found.")
    }
  }
}

এখানে:

  • getUsers(): এটি /api/users রিকোয়েস্টের জন্য একটি GET পদ্ধতি যা দুটি ইউজারের তালিকা রিটার্ন করবে।
  • getUser(id: Int): এটি /api/users/:id রিকোয়েস্টের জন্য একটি GET পদ্ধতি যা ইউজার আইডি অনুসারে ইউজারের তথ্য রিটার্ন করবে।

২.২ Routes ফাইল কনফিগার করা

Play Framework-এর রাউটিং সিস্টেম ব্যবহার করে আমরা আমাদের API এনডপয়েন্টের জন্য রাউট তৈরি করব। conf/routes ফাইলে নিচের মতো রাউট লিখুন:

GET     /api/users          controllers.UserController.getUsers()
GET     /api/users/:id      controllers.UserController.getUser(id: Int)

এখানে:

  • /api/users রিকোয়েস্ট getUsers() মেথডে রাউট করা হয়েছে।
  • /api/users/:id রিকোয়েস্ট getUser(id) মেথডে রাউট করা হয়েছে।

৩. API সার্ভার চালানো

৩.১ Play অ্যাপ্লিকেশন চালানো

Play অ্যাপ্লিকেশন চালানোর জন্য sbt run কমান্ড ব্যবহার করুন:

sbt run

এটি Play সার্ভার চালু করবে এবং আপনি ব্রাউজারে গিয়ে http://localhost:9000 দেখতে পারবেন।

৩.২ API কল পরীক্ষা

এখন, আপনি API কল করতে পারবেন:

  • GET /api/users: সমস্ত ইউজারের তালিকা দেখতে।
  • GET /api/users/1: ইউজার ১-এর তথ্য দেখতে।
  • GET /api/users/2: ইউজার ২-এর তথ্য দেখতে।

এটি Postman অথবা আপনার ব্রাউজারে সরাসরি পরীক্ষা করতে পারেন।

৪. JSON ডাটা ব্যবহার

আমরা এই API সার্ভারে JSON ডাটা পাঠাচ্ছি এবং রিটার্ন করছি। Play Framework স্কালার জন্য JSON হ্যান্ডলিং সহজ করে দিয়েছে।

৪.১ JSON ডাটা রিটার্ন করার জন্য ফাংশন তৈরি করা

Play Framework এর Play JSON লাইব্রেরি ব্যবহার করে JSON ডাটা পাঠানো এবং রিসিভ করা যায়। এটি ব্যবহার করতে, আপনি play.api.libs.json._ লাইব্রেরি আমদানি করবেন।

import play.api.libs.json._

case class User(id: Int, name: String)
object User {
  implicit val userFormat: OFormat[User] = Json.format[User]
}

class UserController(cc: ControllerComponents) extends AbstractController(cc) {

  // GET /api/users
  def getUsers() = Action {
    val users = Seq(
      User(1, "Alice"),
      User(2, "Bob")
    )
    Ok(Json.toJson(users))
  }

  // GET /api/users/:id
  def getUser(id: Int) = Action {
    val user = id match {
      case 1 => Some(User(1, "Alice"))
      case 2 => Some(User(2, "Bob"))
      case _ => None
    }
    
    user match {
      case Some(u) => Ok(Json.toJson(u))
      case None => NotFound(s"User with id $id not found.")
    }
  }
}

এখানে:

  • User একটি কেস ক্লাস যা ইউজারের ডেটা ধারণ করে।
  • Json.format[User]: এটি User কেস ক্লাসের জন্য JSON সিরিয়ালাইজেশন এবং ডি-সিরিয়ালাইজেশন ফর্ম্যাট তৈরি করে।

৫. টেস্টিং (Testing)

API টেস্ট করার জন্য আপনি ScalaTest বা Specs2 ব্যবহার করতে পারেন। Play Framework স্কালার জন্য ইনবিল্ট test ফ্রেমওয়ার্ক প্রোভাইড করে।

৫.১ টেস্ট ক্লাস উদাহরণ

import org.scalatestplus.play._
import play.api.test._
import play.api.test.Helpers._

class UserControllerSpec extends PlaySpec with OneAppPerTest {

  "UserController" should {

    "return a list of users" in {
      val controller = new UserController(stubControllerComponents())
      val result = controller.getUsers().apply(FakeRequest(GET, "/api/users"))
      
      status(result) mustBe OK
      contentType(result) mustBe Some("application/json")
    }

    "return a user by id" in {
      val controller = new UserController(stubControllerComponents())
      val result = controller.getUser(1).apply(FakeRequest(GET, "/api/users/1"))
      
      status(result) mustBe OK
      contentType(result) mustBe Some("application/json")
    }
  }
}

এখানে:

  • FakeRequest ব্যবহার করে একটি ফেক HTTP রিকোয়েস্ট তৈরি করা হয়েছে এবং তার রেসপন্স চেক করা হয়েছে।
  • status(result) এবং contentType(result) ব্যবহার করে API এর রেসপন্স পরীক্ষা করা হয়েছে।

সারাংশ

  • Play Framework ব্যবহার করে আপনি একটি সহজ API সার্ভার তৈরি করতে পারেন যা GET রিকোয়েস্ট হ্যান্ডল করে।
  • build.sbt ফাইলে প্রয়োজনীয় লাইব্রেরি এবং কনফিগারেশন যুক্ত করুন।
  • JSON রিটার্ন এবং সিঙ্ক্রোনাস API হ্যান্ডলিং Play Framework খুব সহজে সমর্থন করে।
  • API সার্ভার তৈরির পর এটি Postman বা curl দ্বারা পরীক্ষা করা যেতে পারে।

এটি একটি সহজ এবং কার্যকরী API সার্ভার তৈরি করার প্রক্রিয়া, যা স্কালার জন্য কার্যকরী হতে পারে।

Content added By
Promotion

Are you sure to start over?

Loading...