একটি 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 সার্ভার তৈরি করার প্রক্রিয়া, যা স্কালার জন্য কার্যকরী হতে পারে।