স্কালায় REST API তৈরি করতে সাধারণত Akka HTTP, Play Framework, অথবা http4s ফ্রেমওয়ার্ক ব্যবহৃত হয়। এই ফ্রেমওয়ার্কগুলি স্কালায় HTTP সার্ভিস তৈরি এবং পরিচালনা করার জন্য অত্যন্ত কার্যকরী। তবে, এখানে আমরা Akka HTTP ব্যবহার করে একটি সিম্পল REST API তৈরি করার উদাহরণ দেখব, যা খুবই জনপ্রিয় এবং শক্তিশালী একটি ফ্রেমওয়ার্ক।
১. Akka HTTP দিয়ে REST API তৈরি
১.১ প্রথমে ডিপেন্ডেন্সি যোগ করা
Akka HTTP এর জন্য স্কালার sbt বিল্ড টুল ব্যবহার করা হয়। প্রথমে আপনার build.sbt ফাইলটি সঠিক ডিপেন্ডেন্সি দিয়ে কনফিগার করতে হবে।
name := "AkkaHttpRestApi"
version := "0.1"
scalaVersion := "2.13.6"
// Akka HTTP Dependencies
libraryDependencies ++= Seq(
"com.typesafe.akka" %% "akka-http" % "10.2.7",
"com.typesafe.akka" %% "akka-stream" % "2.6.16",
"com.typesafe.akka" %% "akka-actor-typed" % "2.6.16",
"com.typesafe.akka" %% "akka-http-spray-json" % "10.2.7"
)এখানে, আমরা akka-http এবং akka-stream লাইব্রেরিগুলি ব্যবহার করছি, যা Akka HTTP এর জন্য অপরিহার্য। এছাড়া JSON সাপোর্ট এর জন্য akka-http-spray-json লাইব্রেরি যোগ করা হয়েছে।
১.২ Akka HTTP সেটআপ
এখন আমরা একটি সিম্পল Akka HTTP সার্ভার তৈরি করব, যা একটি REST API এর মাধ্যমে HTTP GET এবং POST রিকোয়েস্ট পরিচালনা করবে।
import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.server.Directives._
import akka.stream.ActorMaterializer
import akka.http.scaladsl.model.StatusCodes
import spray.json.DefaultJsonProtocol._
import spray.json._
import scala.concurrent.ExecutionContextExecutor
import scala.io.StdIn
// Case class for JSON
case class User(name: String, age: Int)
// JSON format for User
object UserJsonProtocol extends DefaultJsonProtocol {
implicit val userFormat = jsonFormat2(User)
}
object Main extends App {
// Akka HTTP setup
implicit val system: ActorSystem = ActorSystem("rest-api-system")
implicit val materializer: ActorMaterializer = ActorMaterializer()
implicit val executionContext: ExecutionContextExecutor = system.dispatcher
// Route setup
import UserJsonProtocol._
val route =
pathPrefix("api") {
// GET endpoint to return a user as JSON
path("user" / Segment) { name =>
get {
complete {
val user = User(name, 25)
user.toJson.prettyPrint // Convert user to pretty-printed JSON
}
}
} ~
// POST endpoint to accept a user in JSON format
path("user") {
post {
entity(as[String]) { userData =>
val user = userData.parseJson.convertTo[User]
complete {
s"Received user: ${user.name}, age: ${user.age}"
}
}
}
}
}
// Start the server
val bindingFuture = Http().newServerAt("localhost", 8080).bind(route)
println(s"Server online at http://localhost:8080/\nPress RETURN to stop...")
StdIn.readLine() // Wait for user input to shut down
bindingFuture
.flatMap(_.unbind()) // Unbind the server
.onComplete(_ => system.terminate()) // Shutdown system
}১.৩ এটি কি করছে?
ActorSystemএবংActorMaterializer: Akka HTTP সার্ভার চালাতে এই দুটি অবজেক্ট প্রয়োজন।ActorSystemহলো অ্যাক্টর মডেল চালানোর জন্য ব্যবহৃত মূল সিস্টেম, এবংActorMaterializerহল স্ট্রিম ম্যানেজমেন্টের জন্য ব্যবহৃত।pathPrefixএবংpath: HTTP রুট ডিফাইন করা হচ্ছে। একাধিক রুট একসাথে মিলিয়ে API তৈরির জন্যpathPrefixএবংpathব্যবহৃত হচ্ছে।- GET endpoint:
GET /api/user/{name}রিকোয়েস্টটি একটিUserঅবজেক্ট ফেরত দেয়। এখানেUserএকটি কেস ক্লাস, যা স্ক্যালার JSON ফরম্যাটে রূপান্তরিত হয়েছে। - POST endpoint:
POST /api/userরিকোয়েস্টটি JSON ডেটা গ্রহণ করে এবং একটি নতুনUserতৈরি করে প্রাপ্ত তথ্যটি ফেরত দেয়। - JSON ফরম্যাটিং: Akka HTTP JSON প্রক্রিয়াকরণের জন্য
spray-jsonলাইব্রেরি ব্যবহার করা হয়েছে।
২. আবশ্যক লাইব্রেরি ইনস্টলেশন
যেহেতু আমরা JSON ডেটা প্রসেস করতে spray-json লাইব্রেরি ব্যবহার করেছি, এটি আমাদের build.sbt ফাইলে যুক্ত করা আছে।
"com.typesafe.akka" %% "akka-http-spray-json" % "10.2.7"এই লাইব্রেরিটি Akka HTTP এর সাথে JSON প্রক্রিয়াকরণকে সহজ করে দেয়, যেমন JSON সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন।
৩. রানিং এবং টেস্টিং
Akka HTTP সার্ভার চালানো:
আপনার স্কালা প্রোজেক্ট রান করার জন্য, নিম্নলিখিত কমান্ড ব্যবহার করুন:sbt runএটি আপনার অ্যাপ্লিকেশন শুরু করবে এবং
localhost:8080এ REST API চালু করবে।GET রিকোয়েস্ট টেস্ট করা:
একটি ব্রাউজারে বাcurlদিয়ে GET রিকোয়েস্ট পাঠাতে পারেন:curl http://localhost:8080/api/user/Johnআউটপুট:
{"name":"John","age":25}POST রিকোয়েস্ট টেস্ট করা:
একটিcurlদিয়ে POST রিকোয়েস্ট পাঠাতে পারেন:curl -X POST http://localhost:8080/api/user -d '{"name": "Alice", "age": 30}' -H "Content-Type: application/json"আউটপুট:
Received user: Alice, age: 30
৪. একে বড় আকারে স্কেল করা
Akka HTTP এর সাহায্যে আপনি সহজেই একটি REST API বড় আকারে স্কেল করতে পারবেন। আপনি Akka Cluster, Akka Streams, এবং Akka HTTP এর বিভিন্ন ফিচার ব্যবহার করে ডিসট্রিবিউটেড সিস্টেম এবং হাই লোডের জন্য উপযোগী API তৈরি করতে পারবেন।
সারাংশ
- Akka HTTP স্কালায় একটি শক্তিশালী HTTP সার্ভিস তৈরি করার জন্য ব্যবহৃত ফ্রেমওয়ার্ক।
- এটি Actor Model ভিত্তিক এবং পারফরম্যান্স এবং স্কেলেবিলিটি অত্যন্ত ভালো।
- স্কালায় REST API তৈরি করার জন্য Akka HTTP সহজেই GET, POST, PUT, DELETE রিকোয়েস্ট পরিচালনা করতে সক্ষম।
- spray-json লাইব্রেরির মাধ্যমে JSON প্রক্রিয়াকরণ করা যায়।
এই উদাহরণটি একটি সিম্পল REST API তৈরি করার একটি প্রাথমিক গাইড। Akka HTTP এর আরও উন্নত বৈশিষ্ট্য যেমন ফিচার ফ্ল্যাগ, সেশন ম্যানেজমেন্ট, মডিউলার ডিপেন্ডেন্সি ইত্যাদি প্রয়োগের মাধ্যমে বড় এবং স্কেলেবল API তৈরি করা সম্ভব।
Read more