İstekler ve Yanıtlar
Girdiyi okuyup çıktı döndürün.
İstekler ve Yanıtlar, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming dersidir. Bu, 4 dersinin 2. 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.
Değer Olarak İstek
http4s'te bir Request[F]; yöntemi, URI'yi, üst bilgileri, HTTP sürümünü ve akış hâlindeki gövdeyi taşıyan değişmez bir değerdir. İsteği saf erişimcilerle inceler ve yerinde asla değiştirmezsiniz.
Bir isteği değiştirmek için withHeaders, withUri veya benzer birleştiriciler aracılığıyla bir kopya oluşturursunuz.
val r: Request[IO] = Request[IO](
method = Method.GET,
uri = uri"/health"
)Akış Hâlindeki Gövde
Bir isteğin veya yanıtın gövdesi fs2.Stream[F, Byte] türündedir. Tembel ve etkili biçimde tüketilir; bu nedenle büyük yüklerin tamamının bellekte tutulması gerekmez.
Ham baytlarla genellikle doğrudan ilgilenmezsiniz; bir EntityDecoder kod çözme işlemini sizin için gerçekleştirir.
// raw access (rarely needed)
val bytes: fs2.Stream[IO, Byte] = request.bodyGövdenin Kodunu Çözme
Bir EntityDecoder[F, A], gövde akışını bir A değerine dönüştürmeyi bilir. Kodunu çözmek için req.as[A] çağrısını yapın; bu, F[A] döndürür ve gövde bozuksa etkiyi başarısız kılar.
String için yerleşik bir kod çözücü vardır; daha zengin kod çözücüler JSON modüllerinden gelir.
HttpRoutes.of[IO] {
case req @ POST -> Root / "echo" =>
req.as[String].flatMap(body => Ok(body))
}İsteği Bağlama
Durum içinde istek nesnesine erişmek için onu @ ile bağlayın. Burada req, desen yöntem ve yolla eşleşmeye devam ederken isteğin tamamını adlandırır.
Bağlayıcı olmadan yalnızca parçalarına ayrılmış bölümlere erişebilir, gövdeyi veya üst bilgileri okuyamazsınız.
HttpRoutes.of[IO] {
case req @ PUT -> Root / "name" =>
req.as[String].flatMap(n => Ok(s"set $n"))
}Üst Bilgileri Okuma
Üst bilgiler request.headers içinde bulunur. Tür bilgili bir üst bilgi modeliyle headers.get[H] veya rastgele adlar için headers.get(CIString("X-Custom")) kullanın.
Authorization ve Content-Type gibi tür bilgili üst bilgiler, değerlerini sizin için ayrıştırıp doğrular.
import org.http4s.headers.Authorization
val auth: Option[Authorization] =
request.headers.get[Authorization]Yanıt Oluşturma
Ok, Created ve NotFound gibi DSL yanıt oluşturucuları, F[Response[F]] döndüren işlevlerdir. Bir bağımsız değişken geçirmek, bir EntityEncoder aracılığıyla gövdeyi ayarlar.
Her oluşturucu bir durum koduna karşılık gelir; dolayısıyla Created(...), 201 üretir.
Ok("all good") // 200
Created("made it") // 201
NotFound("missing") // 404Durum Kodlarını Doğrudan Kullanma
Kolaylık sağlayan bir oluşturucunun bulunmadığı veya özelleştirme yapmak istediğiniz bir durum için açık bir Status ile Response[F] oluşturun ve withEntity zincirini ekleyin.
Bu, tek bir ifadede durum, üst bilgiler ve gövde üzerinde tam denetim sağlar.
import org.http4s.{Response, Status}
Response[IO](Status.Accepted)
.withEntity("queued")
.pure[IO]Gövdeleri Kodlama
Bir EntityEncoder[F, A], bir değeri yanıt gövdesine serileştirir ve Content-Type değerini ayarlar. String ve bayt kodlayıcıları yerleşiktir; JSON kodlayıcıları Circe'den gelir.
Ok(value) içine bir değer geçirdiğinizde http4s, kodlayıcıyı örtük olarak bulur.
// String encoder is implicit; sets text/plain
val resp: IO[Response[IO]] = Ok("plain text body")Yanıt Üst Bilgilerini Ayarlama
Üst bilgileri bir oluşturucuya ek bağımsız değişkenler olarak geçirerek ekleyin veya yanıt etkisi üzerinde .map(_.putHeaders(...)) zincirini kullanın.
Tür bilgili üst bilgi modelleri, örneğin 201 Created yanıtındaki Location üst bilgisi gibi değerlerin doğru biçimlendirilmesini sağlar.
import org.http4s.headers.Location
Created("ok").map(_.putHeaders(
Location(uri"/items/42")
))Kod Çözme Hatalarını Ele Alma
Gövdenin kodu çözülemediğinde req.as[A], F etkisini başarısız kılar. F[Either[DecodeFailure, A]] elde etmek için req.attemptAs[A].value kullanın ve sol tarafta 400 yanıtı verin.
Bu, bozuk girdi işlemesini açık ve toplam kılar.
req.attemptAs[String].value.flatMap {
case Right(b) => Ok(b)
case Left(_) => BadRequest("bad body")
}Çerezler ve Yönlendirmeler
Çerezleri response.addCookie(ResponseCookie(name, value)) ile ayarlayın. Yönlendirmeler için 3xx oluşturucusu ve bir Location üst bilgisi kullanın.
SeeOther(Location(uri)), deyimsel post-redirect-get yanıtı olan 303 durumunu gerçekleştirir.
import org.http4s.headers.Location
SeeOther(Location(uri"/login"))
.map(_.addCookie("sid", "abc123"))Hızlı Kontrol
Gövdeyi güvenli biçimde koddan çıkarma konusunu düşünün.
Özet
İstekler ve yanıtlar, akış sağlayan fs2 gövdelerine sahip değişmez değerlerdir. EntityDecoder aracılığıyla as/attemptAs kullanarak kod çözümleme, EntityEncoder kullanarak da kodlama yaparsınız.
Oluşturucular durum kodlarını ayarlar, türü belirlenmiş üstbilgiler güvenli kalır; çerezler ve yönlendirmeler yalnızca yanıt dönüşümleridir.
Sıkça Sorulan Sorular
“İstekler ve Yanıtlar” dersi ücretsiz mi?
Evet — “İstekler ve Yanıtlar” 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.
“İstekler ve Yanıtlar” dersinde ne öğreneceğim?
Girdiyi okuyup çıktı döndü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 2. dersidir.
“İstekler ve Yanıtlar” 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