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 <+> healthRoutesRotalardan 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.orNotFoundAra 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
- Routes ve HttpRoutes
- İstekler ve Yanıtlar
- JSON Uç Noktaları
- Uygulamayı Sunma