Content Negotiation Nedir?

İngilizce: Content Negotiation

Content negotiation, HTTP istemcisinin Accept başlıklarıyla istediği formatı bildirdiği, sunucunun uygun temsil seçtiği mekanizmadır.

Content Negotiation Nedir?

Content negotiation, istemcinin aynı kaynağı hangi temsil biçiminde istediğini sunucuya bildirmesidir. Bir endpoint aynı veriyi JSON, HTML, XML veya farklı dilde döndürebilir; istemci tercihlerini HTTP başlıklarıyla iletir.

Nasıl Çalışır?

En yaygın başlık Accept başlığıdır. Örneğin bir tarayıcı text/html isteyebilirken mobil uygulama application/json isteyebilir. Sunucu desteklediği formatlarla bu tercihi karşılaştırır ve uygun yanıtı üretir. Uygun temsil yoksa 406 Not Acceptable dönebilir.

İçerik pazarlığı yalnızca format için kullanılmaz. Accept-Language dil seçimi, Accept-Encoding gzip veya brotli sıkıştırması, Accept-Charset ise karakter seti için kullanılır.

API Tasarımında Kullanımı

REST API tasarımında content negotiation, URL’yi çoğaltmadan farklı istemcilere yanıt vermeyi sağlar. Yine de her API için gerekli değildir. Sadece JSON dönen modern API’lerde Content-Type: application/json ve net hata sözleşmesi çoğu zaman daha anlaşılırdır.

Dikkat Edilecekler

Yanıt formatı başlığa göre değişiyorsa cache anahtarı da değişmelidir; aksi halde HTML bekleyen kullanıcıya JSON dönebilir. Bu nedenle Vary: Accept gibi başlıklar, CDN ve reverse proxy katmanlarıyla birlikte düşünülmelidir.

İş Dünyasında Kullanımı

Content negotiation, web, mobil ve üçüncü parti entegrasyonların aynı kaynak üzerinde farklı temsil ihtiyacı olduğunda anlamlıdır. Fazla esnek tasarım ise dokümantasyonu ve test matrisini büyütür; desteklenen format sayısı gerçek ihtiyaçla sınırlı tutulmalıdır.