0Pricing
Scala for Backend Engineering & Functional Programming · Ders

Uygulamayı Sunma

İşlevsel bir web sunucusu çalıştırın.

Uygulamayı Sunma, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Scala for Backend Engineering & Functional Programming öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Scala for Backend Engineering & Functional Programming kursu toplamda 4 dersten oluşur.

Ember Sunucusu

http4s, HttpApp[F] uygulamanızı bir arka uç üzerinde çalıştırır. Günümüzde varsayılan tercih, cats-effect ve fs2 üzerine kurulmuş, tamamen Scala ile yazılmış bir sunucu olan ve org.http4s.ember.server.EmberServerBuilder olarak sunulan Ember'dır.

Daha eski uygulamalar Blaze kullanabilir; ancak ilerisi için önerilen yol Ember'dır.

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

Sunucuyu Oluşturma

EmberServerBuilder.default[F], akıcı biçimde yapılandırabileceğiniz bir oluşturucu sağlar: ana bilgisayar ve bağlantı noktasına bağlayın, uygulamayı ekleyin, ardından bir Resource[F, Server] elde etmek için .build çağrısını yapın.

Resource kullanmak, kapatma sırasında soketin serbest bırakılmasını garanti eder.

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

ip4s Değişmezleri

Ember, tür güvenli ağ işlemleri için ip4s türlerini kullanır. ipv4"..." ve port"..." araya sokucuları derleme zamanında doğrulama yapar; bu nedenle geçersiz bir adres veya aralık dışı bir bağlantı noktası derlenmez.

Bunlara erişmek için com.comcast.ip4s._ içe aktarımını kullanın.

import com.comcast.ip4s._

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

Resource Yaşam Döngüsü

Sunucu bir Resource'dur; çünkü düzgün biçimde açılıp kapatılması gereken bir sokete sahiptir. resource.use(_ => ...), iç etkinin süresi boyunca sunucunun çalışmasını sağlar.

İşlem kesintiye uğrayana kadar çalıştırmak için IO.never kullanın.

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

IOApp Giriş Noktası

Bir http4s uygulamasının ana sınıfı, yönetilen bir cats-effect çalışma zamanı sağlayan IOApp'i genişletir. run yöntemini IO[ExitCode] döndürecek şekilde uygularsınız.

IOApp, iş parçacığı havuzlarını, sinyal işlemeyi ve düzgün kapanmayı sizin için yönetir.

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

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

Eksiksiz Bir Main

Hepsini bir araya getirelim: sunucu kaynağını oluşturun, ardından işlemin canlı kalması için IO.never ile use edin ve ExitCode.Success döndürün.

Bu, standart http4s giriş noktasıdır.

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

Kaynakları Birleştirme

Gerçek uygulamalar bir sunucudan fazlasını edinir: veritabanı havuzu, HTTP istemcisi ve yapılandırma gibi. Hepsinin ters sırayla serbest bırakılması için bunları Resource üzerinde tek bir for ifadesinde birleştirin.

Edinilen istemcileri rota oluşturma işlemine aktarın.

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

Düzgün Kapanma

Sunucu bir Resource içinde yaşadığı için fiber'ın iptal edilmesi (örneğin IOApp altında SIGTERM geldiğinde), yeni bağlantıları kabul etmeyi durduran ve soketi kapatan sonlandırıcıyı çalıştırır.

Ember, devam eden istekleri yapılandırılabilir bir kapanma zaman aşımı içinde tamamlar.

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

Sunucu Ara Katmanı

Son HttpApp'i oluşturucuya vermeden önce sunucu ara katmanıyla sarmalayın. Yaygın ara katmanlar Logger, CORS, GZip ve ErrorHandling'dir.

Sıra önemlidir: en dıştaki sarmalayıcı isteği ilk, yanıtı ise son görür.

import org.http4s.server.middleware._

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

Yapılandırma

Ana bilgisayarı, bağlantı noktasını ve gizli bilgileri ciris veya pureconfig gibi bir yapılandırma kütüphanesiyle ortamdan okuyun; yapılandırmayı bir Resource'un veya etkinin parçası olarak döndürün.

Aynı ikili dosyanın farklı ortamlarda çalışabilmesi için bağlantı noktalarını sabit kodlamaktan kaçının.

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

Sağlık ve Gözlemlenebilirlik

Orkestratörlerin işlemi denetleyebilmesi için 200 döndüren GET /health gibi bir canlılık rotası sunun. Görünürlük sağlamak için istek günlüğü ve ölçüm ara katmanları ekleyin.

Sağlık kontrollerini ucuz ve bağımlılıklardan bağımsız tutun; böylece alt sistemlerin değil, işlemin durumunu yansıtırlar.

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

Hızlı Kontrol

Sunucunun neden bir Resource olarak modellendiğini hatırlayın.

Özet

Uygulamayı EmberServerBuilder ile sundunuz, ip4s değişmezlerini kullanarak bağladınız ve build.use(_ => IO.never) ile bir IOApp içinden çalıştırdınız.

Kaynakları birleştirdiniz, ara katmanları sardınız, yapılandırmayı ortamdan okudunuz, bir sağlık rotası eklediniz ve düzgün kapanma için Resource'a güvendiniz.

Sıkça Sorulan Sorular

“Uygulamayı Sunma” dersi ücretsiz mi?

Evet — “Uygulamayı Sunma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Scala for Backend Engineering & Functional Programming kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Scala for Backend Engineering & Functional Programming kursu toplamda 4 dersten oluşur.

“Uygulamayı Sunma” dersinde ne öğreneceğim?

İşlevsel bir web sunucusu çalıştırın. Scala for Backend Engineering & Functional Programming ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Scala for Backend Engineering & Functional Programming öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Scala for Backend Engineering & Functional Programming, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Uygulamayı Sunma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Scala for Backend Engineering & Functional Programming dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Scala for Backend Engineering & Functional Programming dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Routes ve HttpRoutes
  2. İstekler ve Yanıtlar
  3. JSON Uç Noktaları
  4. Uygulamayı Sunma
← Scala for Backend Engineering & Functional Programming Sayfasına Dön