Akka HTTP is designed around a set of modular components that work together to provide flexible, reactive, and high-performance HTTP functionalities. Here are its core components:
HttpRequest: Represents an HTTP request.HttpResponse: Represents an HTTP response.HttpEntity: Encapsulates the body of a request or response.Authorization, Content-Type, etc.val request = HttpRequest(uri = "/api/data")
val response = HttpResponse(entity = "Hello, Akka HTTP!")?
GET, POST).val route =
path("hello") {
get {
complete("Hello, World!")
}
}?
path, pathPrefix).get, post).optionalHeaderValueByName).entity).val route =
path("user" / IntNumber) { userId =>
get {
complete(s"Fetching user with ID: $userId")
}
}? import spray.json._
import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
case class User(name: String, age: Int)
object UserJsonProtocol extends DefaultJsonProtocol {
implicit val userFormat = jsonFormat2(User)
}
import UserJsonProtocol._
val route =
path("createUser") {
post {
entity(as[User]) { user =>
complete(s"Received user: ${user.name}")
}
}
}?
import akka.stream.scaladsl.Source
val numbers = Source(1 to 100)
val route =
path("stream") {
get {
complete(numbers.map(_.toString))
}
}?
import akka.http.scaladsl.Http
import akka.http.scaladsl.model._
val responseFuture = Http().singleRequest(HttpRequest(uri = "https://api.example.com/data"))?
import akka.http.scaladsl.Http
import akka.http.scaladsl.model._
val responseFuture = Http().singleRequest(HttpRequest(uri = "https://api.example.com/data"))?
import akka.http.scaladsl.testkit.ScalatestRouteTest
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec
class MyRouteTest extends AnyWordSpec with Matchers with ScalatestRouteTest {
val route =
path("test") {
get {
complete("Test successful")
}
}
"The service" should {
"return a successful response for GET /test" in {
Get("/test") ~> route ~> check {
responseAs[String] shouldEqual "Test successful"
}
}
}
}?