Müşteri sürekli 'application / json' kabul başlığını ve 'application / json' içerik türünü talep eder.
Evet, yapılacak doğru şey bu, ancak satıcının umurunda olduğu anlamına gelmez. Hayal kırıklığınızı tamamen anlıyorum, çünkü ayrıca bir JSON hizmetinin her zaman bir JSON yanıtı vermesi gerektiğini düşünüyorum ama durumun böyle olmadığı birçok örnek var.
Proje boyunca bu aynı uygulama iki farklı satıcı ve iki farklı hizmet arasında uygulanmıştır. Hizmetlerin neden değiştirilmesi gerektiğine karar vermek zorunda olduğumu kendim buldum. Satıcılar müşterinin bununla başa çıkması gerektiğini ve hatta REST tercih kitaplığımın sorgulandığını (RestEasy) sorguladı çünkü varsayılan olarak 'kutusundan' çıkar.
Satıcı ile aynı fikirdeyim. Bu onların servisi ve onu kullanmak için özel durumları açıkça belgelemiş oldukları sürece, gerçekten değiştirdiklerini empoze edemezsiniz. Geliştiricilerin API'lerini benimsemeleri yavaş olduğundan ve geliştiricilerin ihtiyaç duyduklarını dinlerlerse değiştirecekleri için bir dezavantajdır, ancak ne yazık ki standartlara uymaları gerektiği konusunda hiçbir kural yoktur.
Sorun şu ki bir şey eksik mi?
İstek başlıkları, diğer uçta doğru şekilde kesilmediği sürece hiçbir şey ifade etmez. PHP kullanarak bir web API geliştirirsem, o zaman istek başlıklarını cehenneme çeviririm. Ne istersem ona cevap verebilirim. Oysaki, IIS'de C # ile yapılandırılmış bir hizmet, istek başlıklarını, türlerini ve yanıt türünü kullanmada çok daha kolay kullanım sağlar. Satıcının API'yi oluşturmak için kullandığı araçlarla ilgisi vardır.
Bu konuda bilgiçlik mi yapıyorum?
Evet ve Hayır. Bunu geçemeyen geliştirici arkadaşlarım var. Sorun çözüldüler ve API çalışmasını beklediği şekilde çalışana kadar diğer görevlere devam edemezlerdi. Şimdi bu bilgiçlik yapıyor.
Bu bir problem çünkü satıcı görevlerinizi tamamlamak için "daha fazla iş" yarattı. Bu konuda herkes hayal kırıklığına uğrayacaktı. Ben olacağımı biliyorum.
Bu senaryoda içerik türü bir uygulama / json içermeyen bir JSON API olması uygun mudur?
Kesinlikle, ama bu iyi bir uygulama değil.
Bir istemci, sunucuya yalnızca bir bağlamın türünün ne olduğunu söyleyebilir request
. İçin bir içerik türü uygulama yeteneği yoktur response
. İstemci, sunucuya yalnızca accept
olası içerik türleri topluluğu olacağını bildirir .
Başlık Alanı Tanımları
Kabul etme isteği-başlık alanı, yanıt için kabul edilebilir olan belirli ortam türlerini belirtmek için kullanılabilir. Kabul edilen başlıklar, isteğin, hat içi bir görüntü için yapılan bir talepte olduğu gibi, istenen küçük bir grup kümeyle özellikle sınırlı olduğunu belirtmek için kullanılabilir.
Bir müşterinin bir resim talep etmesi mümkündür image/jpeg
, ancak sunucu , resmin bulunup bulunmadığı ile ilgili text/html
bir durum kodu ve yanıt verir 404
. Sunucular da yanlış cevap verebilir. Sayfada bulunmayan dosyalar için yanıt veren pek çok Wordpress web sitesi text/html
ve durum kodu var 200
.
Şimdi bu sunucunun tüm BAD uygulamasıdır. Söylemeye çalıştığım şey, bu kesinlikle mümkün ve sık sık oluyor. İnsanlar bunları yapılandırırken ne yaptıklarını bilmiyorlar.
Referanslar memnuniyetle karşılanacaktır. Bu durumu ticari açıdan nasıl çözersiniz?
Bu soruna birkaç projede rastladım. Sen post
JSON verilerini sunucuya ve o bir JSON veya HTML yanıtı verir.
Yanıtta hangi tip olduğunu bilmek gerçekten önemli bir şey değil. İlk karakter ise {
veya [
JSON varsayalım. Eğer öyleyse <
, HTML varsayabilirsin. Geçmişte böyle idare ettim. Bazen API'yi yazan programcı, HTTP başlıkları hakkında her şeyi bilir. Her şey text/html
cevap olarak geri dönüyor . Şanslıysanız, Apache varsayılan olarak yapılandırılmış ve text/plain
bazen yardımcı olabilir.
Bu sorunlar var ve gelecekte de var olmaya devam edecekler. Sunucudan sunucuya iletişim, bugüne kadar düzenlenmemiş bir etkinliktir. Kötü HTTP yanıtları veren bir sunucu için bir satıcıyı sendikadan atacak bir yönetim organı yoktur.