Menyediakan Aplikasi
Jalankan server web fungsional.
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" % http4sVMembangun 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)
.buildLiteral 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).voidTitik 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 srvPenghentian 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)
.buildMiddleware 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.
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
- Rute dan HttpRoutes
- Permintaan dan Respons
- Endpoint JSON
- Menyediakan Aplikasi