0Pricing
Scala for Backend Engineering & Functional Programming · Ders

Routes ve HttpRoutes

Uç noktaları işlevsel biçimde tanımlayın.

Routes ve HttpRoutes, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming dersidir. Bu, 4 dersinin 1. 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.

http4s Nedir

http4s, cats-effect ve fs2 akışları üzerine kurulmuş, Scala için tamamen işlevsel bir HTTP kitaplığıdır. İstekler ve yanıtlar değişmez değerlerdir; etkiler, IO gibi çok biçimli bir etki türü olan F[_] içinde tutulur.

Bir servlet'i değiştirmek yerine HTTP hizmetini, bir isteği alıp etkili ve isteğe bağlı bir yanıt döndüren işlev olarak tanımlarsınız.

HttpRoutes Türü

Temel soyutlama, Kleisli[OptionT[F, *], Request[F], Response[F]] için bir takma ad olan HttpRoutes[F]'dir. OptionT, eşleşmeyebilen ve yanıt döndürmeyen bir rotayı modeller.

Bu imzayı elle yazmanız nadiren gerekir. Bunun yerine rotaları HttpRoutes.of oluşturucusu ve kısmi bir işlev ile oluşturursunuz.

import cats.effect.IO
import org.http4s._
import org.http4s.dsl.io._

val routes: HttpRoutes[IO] = HttpRoutes.of[IO] {
  case GET -> Root / "hello" => Ok("hi")
}

http4s DSL'i

org.http4s.dsl.io._ DSL içe aktarması, GET, Root ve yol ayırıcı / gibi desen çıkarıcıların yanı sıra Ok ve NotFound gibi yanıt oluşturucuları da getirir.

Bir rota, PartialFunction[Request[F], F[Response[F]]] türündedir. Eşleşmeyen durumlar doğrudan sonraki duruma geçer.

import org.http4s.dsl.io._

HttpRoutes.of[IO] {
  case GET -> Root => Ok("root")
  case GET -> Root / "ping" => Ok("pong")
}

Yolları Eşleştirme

Yol desenleri soldan sağa okunur. Root baştaki eğik çizgidir ve her / "segment" bir gerçek yol bölümünü eşleştirir.

-> oku, HTTP yöntemini yoldan ayırır. Dolayısıyla GET -> Root / "users", GET /users ile eşleşir.

HttpRoutes.of[IO] {
  case GET -> Root / "users" => Ok("all users")
  case GET -> Root / "users" / "me" => Ok("current user")
}

Yol Değişkenleri

Bir yoldaki küçük harfli yalın bağlayıcı, o bölümü bir String olarak yakalar. Burada id, /users/ sonrasında görünen her şeyi bağlar.

Yakalanan bölümler her zaman dizelerdir; bunları daha zengin türlere kendiniz ayrıştırabilir veya birazdan gösterilen çıkarıcı nesneleri kullanabilirsiniz.

HttpRoutes.of[IO] {
  case GET -> Root / "users" / id =>
    Ok(s"user $id")
}

Tür Bilgili Yol Çıkarıcıları

http4s, yalnızca bölüm o türe ayrıştırılabildiğinde eşleşen IntVar ve LongVar gibi çıkarıcılar sunar. Sayısal olmayan bir bölüm, durumun sonraki duruma geçmesine neden olur.

UUID gibi alan türleri için unapply kullanan özel çıkarıcılar tanımlayabilirsiniz.

HttpRoutes.of[IO] {
  case GET -> Root / "users" / IntVar(id) =>
    Ok(s"numeric user $id")
}

Yöntem Eşleştirme

-> önündeki yöntem çıkarıcısı GET, POST, PUT, DELETE, PATCH ve daha fazlasından biri olabilir. Farklı yöntemlere sahip aynı yol, ayrı durumlar hâline gelir.

Bir yol eşleşir ancak yöntem eşleşmezse http4s otomatik olarak 405 Method Not Allowed yanıtını verir.

HttpRoutes.of[IO] {
  case GET -> Root / "items" => Ok("list")
  case POST -> Root / "items" => Created("made")
  case DELETE -> Root / "items" / IntVar(i) => NoContent()
}

Rotaları Birleştirme

HttpRoutes[F] bir SemigroupK oluşturduğundan, birden çok rota grubunu <+> işleciyle birleştirebilirsiniz. Yanıt üreten ilk grup kazanır.

Bu, rotaları özelliğe göre ayrı değerlere bölmenize ve tek bir yerde birleştirmenize olanak tanır.

import cats.syntax.semigroupk._

val all = userRoutes <+> itemRoutes <+> healthRoutes

Rotalardan HttpApp'e

Bir sunucunun kısmi değil, toplam bir işleve ihtiyacı vardır. HttpRoutes[F], hiçbir rota eşleşmediğinde 404 sağlayan .orNotFound ile HttpApp[F] türüne dönüştürülür.

HttpApp[F], her zaman bir yanıt döndüren Kleisli[F, Request[F], Response[F]] türüdür.

import org.http4s.HttpApp

val app: HttpApp[IO] = routes.orNotFound

Ara Katmanla Sarma

Ara katmanlar, HttpRoutes[F] => HttpRoutes[F] (veya HttpApp üzerinde) biçimindeki işlevlerdir. Rota mantığına dokunmadan günlük kaydı, CORS, gzip veya kimlik doğrulama eklemek için bir hizmeti sararlar.

Yerleşik örnekler arasında org.http4s.server.middleware içindeki Logger, CORS ve GZip bulunur.

import org.http4s.server.middleware.Logger

val logged = Logger.httpApp(logHeaders = true, logBody = false)(app)

Rotalarda Sorgu Parametreleri

Sorgu parametreleri, QueryParamDecoderMatcher sınıfını genişleten eşleştirici nesnelerle eşleştirilir. Yol deseninde bir :? sonrasında görünürler.

Bulunmayabilecek parametreler için OptionalQueryParamDecoderMatcher kullanın; sonuç bir Option olur.

object NameParam extends QueryParamDecoderMatcher[String]("name")

HttpRoutes.of[IO] {
  case GET -> Root / "hi" :? NameParam(n) => Ok(s"hi $n")
}

Hızlı Kontrol

Rota birleştirme konusundaki anlayışınızı test edin.

Özet

Rotaları HttpRoutes.of ve DSL ile oluşturdunuz; yöntemleri ve yolları eşleştirdiniz; IntVar ve eşleştiricilerle değişkenleri yakaladınız; grupları <+> ile birleştirdiniz.

Rotalar kısmidir; .orNotFound onları toplam bir HttpApp'e dönüştürür ve ara katmanlar ortak kaygılar için hizmetleri sarar.

Sıkça Sorulan Sorular

“Routes ve HttpRoutes” dersi ücretsiz mi?

Evet — “Routes ve HttpRoutes” 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.

“Routes ve HttpRoutes” dersinde ne öğreneceğim?

Uç noktaları işlevsel biçimde tanımlayı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 1. dersidir.

“Routes ve HttpRoutes” 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