İçerik ve JSON Kodlama
İstek ve yanıt gövdelerinin kodunu çözün ve kodlayın.
İçerik ve JSON Kodlama, CoddyKit'te ücretsiz bir Swift Academy 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, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.
Content Protokolü
HTTP üzerinden taşınan Vapor modelleri Content protokolüne uyar. Content, Swift'in Codable protokolü üzerine kuruludur; istek gövdelerinin kodunun çözülmesini ve yanıtların otomatik olarak kodlanmasını sağlar.
import Vapor
struct Todo: Content {
var id: Int?
var title: String
var done: Bool
}Yanıtı JSON Olarak Kodlama
Bir işleyiciden herhangi bir Content değeri döndürdüğünüzde Vapor bunu JSON'a kodlar ve doğru Content-Type üst bilgisini sizin için ayarlar.
app.get("todo") { req -> Todo in
Todo(id: 1, title: "Learn Vapor", done: false)
}İstek Gövdesinin Kodunu Çözme
Gelen bir istekteki türü belirlenmiş yükü req.content.decode(_:) ile okuyun. Vapor, Content-Type değerini inceler ve JSON'u (veya form verilerini) buna göre ayrıştırır.
app.post("todo") { req -> Todo in
let incoming = try req.content.decode(Todo.self)
return incoming
}İçerik Olarak Diziler
Content türlerinden oluşan koleksiyonlar otomatik olarak JSON dizilerine kodlanır. [Todo] döndürdüğünüzde istemci bir JSON listesi alır.
app.get("todos") { req -> [Todo] in
[Todo(id: 1, title: "A", done: false),
Todo(id: 2, title: "B", done: true)]
}Özel Kodlama Anahtarları
Content, Codable olduğundan Swift özellik adlarını CodingKeys kullanarak farklı JSON anahtarlarıyla eşleyebilirsiniz. Bu, snake_case kullanan API'ler için yararlıdır.
struct User: Content {
var firstName: String
enum CodingKeys: String, CodingKey {
case firstName = "first_name"
}
}JSON Kodlayıcısını Yapılandırma
Örneğin tüm anahtarları snake_case biçimine dönüştürmek veya tarihleri ISO-8601 biçiminde biçimlendirmek için ContentConfiguration aracılığıyla genel bir kodlama stratejisi ayarlayabilirsiniz.
let encoder = JSONEncoder()
encoder.keyEncodingStrategy = .convertToSnakeCase
encoder.dateEncodingStrategy = .iso8601
ContentConfiguration.global.use(encoder: encoder, for: .json)Kodu Çözülmüş İçeriği Doğrulama
Vapor'ın Validatable protokolü doğrulama kuralları tanımlamanızı sağlar. Hatalı girdiyi anlaşılır bir 400 hatasıyla reddetmek için kodu çözmeden önce try Todo.validate(content: req) çağrısını yapın.
extension Todo: Validatable {
static func validations(_ v: inout Validations) {
v.add("title", as: String.self, is: !.empty)
}
}Bir İşleyicide Doğrulama Kullanma
Önce doğrulayın, ardından kodu çözün. Doğrulama başarısız olursa Vapor otomatik olarak hata fırlatır ve istemci açıklayıcı bir hata yanıtı alır.
app.post("todo") { req -> Todo in
try Todo.validate(content: req)
return try req.content.decode(Todo.self)
}İstek ve Yanıt DTO'larını Ayırma
İyi bir uygulama, girdi ve çıktı için ayrı türler kullanmaktır. Örneğin istekler için kimliği olmayan bir CreateTodo, yanıtlar içinse tam bir Todo kullanabilirsiniz. Bu, API'nizi dahili modellerden bağımsızlaştırır.
struct CreateTodo: Content {
var title: String
}
struct TodoResponse: Content {
var id: Int
var title: String
}Sorgu Dizelerini Kodlama
Aynı Content mekanizması, sorgu dizelerinin req.query.decode(_:) aracılığıyla bir yapıya kodunun çözülmesini sağlar; bu mekanizma filtre ve sayfalama parametreleri için idealdir.
struct Page: Content {
var page: Int?
var size: Int?
}
app.get("items") { req -> String in
let p = try req.query.decode(Page.self)
return "page=" + String(p.page ?? 1)
}İçerikle Özel Durum Döndürme
Hem gövdeyi hem de durumu denetlemek için bir Response oluşturup içeriği bunun içine kodlayın veya demet benzeri bir yapı döndürün. Aşağıdaki örnek, JSON gövdesiyle birlikte 201 Created durumunu ayarlar.
app.post("todo") { req -> Response in
let todo = try req.content.decode(Todo.self)
let res = Response(status: .created)
try res.content.encode(todo)
return res
}Kısa Kontrol: Content ve JSON
Kodlama bilginizi sınayın.
Özet: Content ve JSON Kodlama
Verilerin Vapor'da ağ üzerinden nasıl aktarıldığını öğrendiniz:
- Modelleri (
Codableüzerine kurulu)Contentprotokolüne uydurun. - JSON kodlamak için içeriği döndürün; gövdeleri okumak için
req.content.decodekullanın. - Anahtarları ve tarihleri
CodingKeysileContentConfigurationüzerinden özelleştirin. - Girdiyi
Validatableile doğrulayın ve ayrı istek/yanıt DTO'ları kullanmayı değerlendirin.
Sıkça Sorulan Sorular
“İçerik ve JSON Kodlama” dersi ücretsiz mi?
Evet — “İçerik ve JSON Kodlama” 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 Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.
“İçerik ve JSON Kodlama” dersinde ne öğreneceğim?
İstek ve yanıt gövdelerinin kodunu çözün ve kodlayın. Swift Academy 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.
Swift Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Swift Academy, 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.
“İçerik ve JSON Kodlama” 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 Swift Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Swift Academy 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
- Yönlendirme ve İstek İşleme
- İçerik ve JSON Kodlama
- Fluent ORM ve Modeller
- Ara Katman Yazılımı ve Kimlik Doğrulama