Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian · Pelajaran

Titik Akhir JSON

Gabungkan http4s dengan Circe.

Pelajaran 3 daripada 413 langkah

Titik Akhir JSON ialah pelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian merangkumi sejumlah 4 pelajaran.

JSON melalui circe

http4s mengintegrasikan JSON melalui modul http4s-circe, yang menghubungkan pengekod circe dengan EntityDecoder dan EntityEncoder. circe ialah pustaka JSON berfungsi de facto untuk Scala.

Anda mentakrifkan tika Encoder dan Decoder untuk jenis anda, kemudian membiarkan http4s mengendalikan format pada wayar.

// build.sbt
// "org.http4s" %% "http4s-circe" % http4sV
// "io.circe"   %% "circe-generic" % circeV

Menerbitkan Codec

Dengan circe-generic, anda menerbitkan codec secara automatik menggunakan deriveEncoder/deriveDecoder atau anotasi @JsonCodec. Codec ini memetakan medan kelas kes kepada kunci JSON mengikut nama.

Penerbitan memerlukan codec untuk setiap jenis medan secara rekursif.

import io.circe.generic.semiauto._

case class User(id: Int, name: String)
implicit val enc = deriveEncoder[User]
implicit val dec = deriveDecoder[User]

EntityEncoder daripada circe

Import org.http4s.circe.CirceEntityEncoder._ menyediakan EntityEncoder[F, A] tersirat untuk sebarang A yang mempunyai Encoder circe. Kemudian Ok(user) disiri kepada JSON dengan application/json.

Penukaran manual kepada Json tidak diperlukan dalam pengendali.

import org.http4s.circe.CirceEntityEncoder._

HttpRoutes.of[IO] {
  case GET -> Root / "me" => Ok(User(1, "Ada"))
}

EntityDecoder daripada circe

Imej cermin: org.http4s.circe.CirceEntityDecoder._ menyediakan EntityDecoder[F, A] untuk sebarang A yang mempunyai Decoder circe. Kemudian req.as[User] menghurai badan JSON.

Kedua-dua import ini digabungkan sebagai CirceEntityCodec._.

import org.http4s.circe.CirceEntityDecoder._

case req @ POST -> Root / "users" =>
  req.as[User].flatMap(u => Created(u))

POST JSON Lengkap

Menggabungkan penyahkodan dan pengekodan menghasilkan titik akhir penciptaan yang kemas: hurai JSON masuk kepada jenis domain, jalankan logik perniagaan, kemudian enkod hasilnya semula sebagai JSON.

Kegagalan penyahkodan muncul sebagai 422 atau 400 melalui penyahkod circe.

import org.http4s.circe.CirceEntityCodec._

case req @ POST -> Root / "users" =>
  for {
    in  <- req.as[User]
    out <- store.create(in)
    res <- Created(out)
  } yield res

Interpolator json

Untuk JSON ad hoc, interpolator rentetan json circe daripada io.circe.literal membina nilai Json secara terus, bersama nilai Scala yang diinterpolasi.

Ia berguna untuk respons kecil atau lekapan ujian tanpa kelas kes.

import io.circe.literal._

val body = json"""{ "status": "ok", "count": 3 }"""
Ok(body)

Nama Medan Tersuai

Apabila kunci JSON berbeza daripada nama medan Scala, terbitkan dengan Configuration daripada circe-generic-extras, contohnya snake_case, atau tulis codec secara manual menggunakan forProduct2.

Ini memisahkan kontrak API anda daripada penamaan dalaman.

import io.circe.Encoder

implicit val e: Encoder[User] =
  Encoder.forProduct2("user_id", "full_name")(u => (u.id, u.name))

Mengekod Senarai

circe menyediakan codec untuk List, Vector, Option dan Map secara automatik sebaik sahaja codec elemen tersedia. Jadi, pemulangan koleksi berfungsi secara langsung.

Senarai kosong dikodkan kepada [], manakala None dikodkan sama ada sebagai kunci yang tiada atau null.

import org.http4s.circe.CirceEntityEncoder._

case GET -> Root / "users" =>
  store.all.flatMap(us => Ok(us)) // List[User] -> JSON array

Mengesahkan JSON yang Dinukod

Penyahkodan memberikan anda nilai yang sah dari segi sintaks; pengesahan semantik perlu anda lakukan sendiri. Jalankan semakan selepas as dan hentikan pemprosesan dengan BadRequest apabila tidak sah.

Simpan invarian domain dalam pembina pintar yang memulangkan Either demi kejelasan.

req.as[User].flatMap { u =>
  if (u.name.nonEmpty) Created(u)
  else BadRequest("name required")
}

Respons Ralat sebagai JSON

Pulangkan ralat berstruktur sebagai JSON supaya klien boleh menghuraikannya. Takrifkan kelas kes ralat dengan pengekod circe dan hantarkannya kepada pembina status yang berkaitan.

Bentuk ralat yang konsisten menjadikan API jauh lebih mudah digunakan.

case class ApiError(code: String, message: String)
implicit val e = deriveEncoder[ApiError]

BadRequest(ApiError("E_NAME", "name required"))

Menstrim JSON

Untuk koleksi besar, anda boleh menstrim JSON dan bukannya menimbal keseluruhannya. jsonEncoderOf bersama Stream[F, A] fs2 menghasilkan tatasusunan JSON secara berperingkat.

Ini mengekalkan penggunaan memori yang malar untuk set hasil besar dengan memanfaatkan tekanan belakang fs2.

import org.http4s.circe.streamJsonArrayEncoder

case GET -> Root / "feed" =>
  Ok(store.streamAll) // fs2.Stream[IO, Event]

Semakan Pantas

Ingat semula import yang membolehkan penyahkodan badan JSON kepada kelas kes.

Ringkasan

Anda menyambungkan JSON dengan http4s-circe: terbitkan codec, import CirceEntityCodec, dan gunakan Ok(value) / req.as[A] untuk input dan output JSON yang lengkap.

Anda mengendalikan senarai, nama medan tersuai, ralat JSON berstruktur dan juga tatasusunan distrim untuk muatan besar.

Percuma untuk bermula

Pelajari Scala dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
39
Pelajaran
143

Soalan Lazim

Adakah pelajaran “Titik Akhir JSON” percuma?

Ya — teks penuh “Titik Akhir JSON” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian, tingkat taraf kepada CoddyKit PRO. Kursus Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Titik Akhir JSON”?

Gabungkan http4s dengan Circe. Anda berlatih Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Titik Akhir JSON” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian ini?

Ya. Setiap pelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Laluan dan HttpRoutes
  2. Permintaan dan Respons
  3. Titik Akhir JSON
  4. Menghidangkan Aplikasi
← Kembali ke Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian