Mesajlar, temsiller ve dosyalar
Content negotiation: Accept, q ve 406/415
Temsil, dil, sıkıştırma ve tercih önceliğini ayrı düşün.
Kavramı anlayalım
Content negotiation aynı kaynağın farklı temsilleri arasından seçimdir. Accept medya türünü, Accept-Language dili, Accept-Encoding içerik kodlamasını belirtir. q değeri göreli tercihi gösterir; q=0 kabul edilmeyen seçenek anlamına gelir. Sunucu hangi boyutlarda gerçekten seçim yaptığını bilmeli; desteklemiyorsa sırf header geldi diye varmış gibi davranmamalıdır.
Content-Type gönderilen gövdenin türüdür. İstemci application/json istiyor fakat sunucu uygun temsil sunamıyorsa 406 düşünülebilir; istemci desteklenmeyen XML body gönderdiyse 415 ayrı konudur. Content-Encoding: gzip ile Content-Type: application/json birlikte bulunabilir: biri sıkıştırma, diğeri açılmış temsil türüdür. Charset medya türü sözleşmesine göre kullanılır.
Vary yanıt seçimini etkileyen request alanlarını cache’e bildirir. Dil bazlı seçim yapıp Vary veya eşdeğer güvenli cache key modelini unutursan yanlış dil başka ziyaretçiye gidebilir. Kontrolsüz çok header üzerinden vary yapmak cache verimini azaltır. API’de açık path/query dil seçimi ile negotiation yaklaşımını karşılaştır. Browser header’ları kullanıcının kesin kimliği veya konuştuğu dilin kanıtı değildir.
Çok dilli temsil ve cache davranışı tasarlarken.
Accept’i request body türü sanmak.
Aynı konu. Üç farklı derinlik.
Accept: application/jsonYanıt için JSON tercihi.
Bu sayfa dış sunuculara istek göndermez. HTTP mesajları temsili, HTTP/1.1 biçiminde okunabilir gösterimlerdir; HTTP/2 ve HTTP/3 wire formatı değildir. example.test ayrılmış öğretim alan adıdır. Komut ve JavaScript örneklerini yalnız kendi test ortamında uygula; gerçek token veya cookie yayımlama.
Önce kendin dene.
JSON isteyen istemci XML gönderdi. Hangi alan neyi anlatıyor?
Çözümü ve açıklamasını göster
Accept: application/json
Content-Type: application/xmlAccept yanıtı, Content-Type gönderilen body’yi tanımlar.