JSON Uç Noktaları
http4s ile Circe'yi birleştirin.
JSON Uç Noktaları, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming dersidir. Bu, 4 dersinin 3. 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.
circe ile JSON
http4s, http4s-circe modülü üzerinden JSON ile bütünleşir; bu modül circe kodlayıcılarını EntityDecoder ve EntityEncoder ile birbirine bağlar. circe, Scala için fiilî işlevsel JSON kütüphanesidir.
Türleriniz için Encoder ve Decoder örnekleri tanımlar, kablo üzerindeki biçimi http4s'in yönetmesine izin verirsiniz.
// build.sbt
// "org.http4s" %% "http4s-circe" % http4sV
// "io.circe" %% "circe-generic" % circeVKodlayıcıları Türetme
circe-generic ile deriveEncoder/deriveDecoder kullanarak veya @JsonCodec ek açıklamasıyla kodlayıcıları otomatik olarak türetebilirsiniz. Bunlar, durum sınıfı alanlarını adlarına göre JSON anahtarlarıyla eşleştirir.
Türetme işlemi, özyinelemeli olarak her alan türü için kodlayıcılar gerektirir.
import io.circe.generic.semiauto._
case class User(id: Int, name: String)
implicit val enc = deriveEncoder[User]
implicit val dec = deriveDecoder[User]circe'den EntityEncoder
org.http4s.circe.CirceEntityEncoder._ içe aktarımı, circe Encoder'ına sahip her A için örtük bir EntityEncoder[F, A] sağlar. Böylece Ok(user), application/json kullanılarak JSON biçimine serileştirilir.
İşleyicilerde Json türüne elle dönüştürme yapmanız gerekmez.
import org.http4s.circe.CirceEntityEncoder._
HttpRoutes.of[IO] {
case GET -> Root / "me" => Ok(User(1, "Ada"))
}circe'den EntityDecoder
Ayna görüntüsü: org.http4s.circe.CirceEntityDecoder._, circe Decoder'ına sahip her A için bir EntityDecoder[F, A] sağlar. Ardından req.as[User], JSON gövdesini ayrıştırır.
Her iki içe aktarma da birlikte CirceEntityCodec._ olarak paketlenmiştir.
import org.http4s.circe.CirceEntityDecoder._
case req @ POST -> Root / "users" =>
req.as[User].flatMap(u => Created(u))Eksiksiz Bir JSON POST İsteği
Kod çözümleme ve kodlamayı birleştirmek, temiz bir oluşturma uç noktası sağlar: gelen JSON'ı bir alan türüne ayrıştırır, iş mantığını çalıştırır, ardından sonucu yeniden JSON olarak kodlarsınız.
Kod çözümleme hataları, circe kod çözücüsü aracılığıyla 422 veya 400 olarak açığa çıkar.
import org.http4s.circe.CirceEntityCodec._
case req @ POST -> Root / "users" =>
for {
in <- req.as[User]
out <- store.create(in)
res <- Created(out)
} yield resjson Araya Sokucusu
Geçici JSON için io.circe.literal içindeki circe json dize araya sokucusu, Scala değerlerinin araya sokulduğu bir Json değerini doğrudan oluşturur.
Durum sınıfı kullanmadan küçük yanıtlar veya test verileri oluşturmak için kullanışlıdır.
import io.circe.literal._
val body = json"""{ "status": "ok", "count": 3 }"""
Ok(body)Özel Alan Adları
JSON anahtarları Scala alan adlarından farklı olduğunda, örneğin snake_case gibi, circe-generic-extras içindeki bir Configuration ile türetme yapın veya forProduct2 kullanarak kodlayıcıyı elle yazın.
Bu, API sözleşmenizi dahili adlandırmadan bağımsız hâle getirir.
import io.circe.Encoder
implicit val e: Encoder[User] =
Encoder.forProduct2("user_id", "full_name")(u => (u.id, u.name))Listeleri Kodlama
circe, öğe kodlayıcısı mevcut olduğunda List, Vector, Option ve Map için kodlayıcıları otomatik olarak sağlar. Bu nedenle bir koleksiyon döndürmek doğrudan çalışır.
Boş bir liste [] olarak, None ise eksik bir anahtar veya null olarak kodlanır.
import org.http4s.circe.CirceEntityEncoder._
case GET -> Root / "users" =>
store.all.flatMap(us => Ok(us)) // List[User] -> JSON arrayKod Çözümü Yapılmış JSON'ı Doğrulama
Kod çözümleme size sözdizimsel olarak geçerli bir değer verir; anlamsal doğrulama ise size aittir. as sonrasında kontrolleri çalıştırın ve geçersiz olduğunda BadRequest ile kısa devre yapın.
Anlaşılır olması için alan değişmezlerini Either döndüren akıllı oluşturucularda tutun.
req.as[User].flatMap { u =>
if (u.name.nonEmpty) Created(u)
else BadRequest("name required")
}JSON Olarak Hata Yanıtları
İstemcilerin ayrıştırabilmesi için yapılandırılmış hataları JSON olarak döndürün. circe kodlayıcısına sahip bir hata durum sınıfı tanımlayın ve bunu ilgili durum oluşturucusuna aktarın.
Tutarlı hata biçimleri, API'lerin kullanılmasını çok daha kolaylaştırır.
case class ApiError(code: String, message: String)
implicit val e = deriveEncoder[ApiError]
BadRequest(ApiError("E_NAME", "name required"))Akışlı JSON
Büyük koleksiyonlar için belleğe almak yerine JSON'ı akış olarak gönderebilirsiniz. jsonEncoderOf ile fs2 Stream[F, A] birlikte, JSON dizisini artımlı olarak üretir.
Bu yaklaşım, fs2'nin geri basıncından yararlanarak büyük sonuç kümelerinde bellek kullanımını sabit tutar.
import org.http4s.circe.streamJsonArrayEncoder
case GET -> Root / "feed" =>
Ok(store.streamAll) // fs2.Stream[IO, Event]Hızlı Kontrol
Bir JSON gövdesinin durum sınıfına kod çözümlemesini hangi içe aktarmanın etkinleştirdiğini hatırlayın.
Özet
JSON'ı http4s-circe ile bağladınız: kodlayıcıları türettiniz, CirceEntityCodec içe aktardınız ve eksiksiz JSON girdi/çıktısı için Ok(value) / req.as[A] kullandınız.
Listeleri, özel alan adlarını, yapılandırılmış JSON hatalarını ve hatta büyük yükler için akışlı dizileri ele aldınız.
Sıkça Sorulan Sorular
“JSON Uç Noktaları” dersi ücretsiz mi?
Evet — “JSON Uç Noktaları” 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.
“JSON Uç Noktaları” dersinde ne öğreneceğim?
http4s ile Circe'yi birleştirin. 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 3. dersidir.
“JSON Uç Noktaları” 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