Scala for Backend Engineering & Functional Programming · Pelajaran

Menyediakan Aplikasi

Jalankan server web fungsional.

Pelajaran 4 dari 413 langkah

Menyediakan Aplikasi adalah pelajaran Scala for Backend Engineering & Functional Programming gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Scala for Backend Engineering & Functional Programming, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.

Server Ember

http4s menjalankan HttpApp[F] Anda pada suatu backend. Pilihan modern bawaan adalah Ember, server Scala murni yang dibangun di atas cats-effect dan fs2, tersedia sebagai org.http4s.ember.server.EmberServerBuilder.

Aplikasi lama mungkin menggunakan Blaze, tetapi Ember adalah jalur yang direkomendasikan ke depannya.

// build.sbt
// "org.http4s" %% "http4s-ember-server" % http4sV

Membangun Server

EmberServerBuilder.default[F] memberikan builder yang Anda konfigurasi secara lancar: mengikat host dan port, memasang app, lalu memanggil .build untuk mendapatkan Resource[F, Server].

Menggunakan Resource menjamin soket dilepaskan saat penghentian.

import com.comcast.ip4s._
import org.http4s.ember.server.EmberServerBuilder

EmberServerBuilder.default[IO]
  .withHost(ipv4"0.0.0.0")
  .withPort(port"8080")
  .withHttpApp(app)
  .build

Literal ip4s

Ember menggunakan tipe ip4s untuk jaringan yang aman secara tipe. Interpolator ipv4"..." dan port"..." memvalidasi saat kompilasi, sehingga alamat yang tidak valid atau port di luar rentang tidak akan berhasil dikompilasi.

Impor com.comcast.ip4s._ untuk mengaksesnya.

import com.comcast.ip4s._

val host = host"localhost"
val p    = port"8080"

Siklus Hidup Resource

Server berupa Resource karena memiliki soket yang harus dibuka dan ditutup dengan benar. resource.use(_ => ...) membuatnya tetap berjalan selama efek bagian dalam berlangsung.

Gunakan IO.never untuk menjalankannya sampai proses dihentikan.

server.use(_ => IO.never).void

Titik Masuk IOApp

Kelas utama app http4s memperluas IOApp, yang menyediakan runtime cats-effect terkelola. Anda mengimplementasikan run yang mengembalikan IO[ExitCode].

IOApp menangani kumpulan thread, penanganan sinyal, dan penghentian yang anggun untuk Anda.

import cats.effect.{IO, IOApp, ExitCode}

object Main extends IOApp {
  def run(args: List[String]): IO[ExitCode] = ???
}

Main Lengkap

Menyatukan semuanya: bangun resource server, lalu gunakan use dengan IO.never agar proses tetap hidup, dan kembalikan ExitCode.Success.

Inilah titik masuk http4s yang baku.

def run(args: List[String]): IO[ExitCode] =
  EmberServerBuilder.default[IO]
    .withPort(port"8080")
    .withHttpApp(app)
    .build
    .use(_ => IO.never)
    .as(ExitCode.Success)

Menyusun Resource

Aplikasi nyata memperoleh lebih dari sekadar server: kumpulan koneksi basis data, klien HTTP, dan konfigurasi. Susun semuanya dalam satu pemahaman-for di atas Resource agar semuanya dilepaskan dalam urutan terbalik.

Teruskan klien yang telah diperoleh ke konstruksi rute.

for {
  client <- EmberClientBuilder.default[IO].build
  app     = buildApp(client)
  srv    <- serverResource(app)
} yield srv

Penghentian yang Anggun

Karena server berada dalam Resource, pembatalan fiber (misalnya saat SIGTERM di bawah IOApp) menjalankan finalizer yang berhenti menerima koneksi dan menutup soket.

Ember menyelesaikan permintaan yang sedang berlangsung dalam batas waktu penghentian yang dapat dikonfigurasi.

EmberServerBuilder.default[IO]
  .withShutdownTimeout(30.seconds)
  .withHttpApp(app)
  .build

Middleware Server

Bungkus HttpApp final dengan middleware server sebelum menyerahkannya kepada builder. Middleware yang umum adalah Logger, CORS, GZip, dan ErrorHandling.

Urutan penting: pembungkus terluar melihat permintaan lebih dahulu dan respons paling akhir.

import org.http4s.server.middleware._

val finalApp = Logger.httpApp(true, false)(
  CORS.policy.withAllowOriginAll(app)
)

Konfigurasi

Baca host, port, dan rahasia dari lingkungan menggunakan pustaka konfigurasi seperti ciris atau pureconfig, lalu kembalikan konfigurasi sebagai bagian dari Resource atau efek.

Hindari menanamkan port secara langsung agar biner yang sama dapat berjalan di berbagai lingkungan.

val port = sys.env.get("PORT")
  .flatMap(Port.fromString)
  .getOrElse(port"8080")

Kesehatan dan Observabilitas

Sediakan rute liveness seperti GET /health yang mengembalikan 200 agar orkestrator dapat memeriksa proses. Tambahkan pencatatan permintaan dan middleware metrik untuk visibilitas.

Pastikan pemeriksaan kesehatan ringan dan tidak bergantung pada dependensi agar mencerminkan status proses, bukan layanan hilir.

val health = HttpRoutes.of[IO] {
  case GET -> Root / "health" => Ok("UP")
}

Pemeriksaan Singkat

Ingat kembali alasan server dimodelkan sebagai Resource.

Rangkuman

Anda menyajikan app dengan EmberServerBuilder, mengikatnya menggunakan literal ip4s, dan menjalankannya dari IOApp dengan build.use(_ => IO.never).

Anda menyusun resource, membungkus middleware, membaca konfigurasi dari lingkungan, menambahkan rute kesehatan, dan mengandalkan Resource untuk penghentian yang anggun.

Gratis untuk memulai

Belajar Scala dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
39
Pelajaran
143

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menyediakan Aplikasi” gratis?

Ya — teks lengkap “Menyediakan Aplikasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Scala for Backend Engineering & Functional Programming, upgrade ke CoddyKit PRO. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Menyediakan Aplikasi”?

Jalankan server web fungsional. Kamu berlatih Scala for Backend Engineering & Functional Programming dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Scala for Backend Engineering & Functional Programming?

Tidak diperlukan pengalaman sebelumnya. Scala for Backend Engineering & Functional Programming di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Menyediakan Aplikasi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Scala for Backend Engineering & Functional Programming ini?

Ya. Setiap pelajaran Scala for Backend Engineering & Functional Programming menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Rute dan HttpRoutes
  2. Permintaan dan Respons
  3. Endpoint JSON
  4. Menyediakan Aplikasi
← Kembali ke Scala for Backend Engineering & Functional Programming