Bilinmeyen parametrelere izin vermeli miyim?


12

RESTful API tasarlıyorum ve başlık sorunu ile karşı karşıya, netlik için yeniden ifade:

İstemci tanınmayan bir parametre gönderirse hızlı bir şekilde başarısız olmam gerekir mi? Örneğin,

http://example.com/api/foo?bar=true&paula=bean

Yukarıda, bargeçerli bir parametredir ancak paulaAPI tarafından belirtilmemiştir. Yapmalımıyım

  • İstemciyi hatayı uyar
  • Hızlı başarısız
  • Boşver

İstemciyi uyarırsam, yalnızca ilk parametre için bir uyarı verebilirim, çünkü bunlara sonsuz sayıda gönderebilirler ve sunucu muhtemelen daha iyi şeyler yapabilir. Benzer şekilde, başarısız olduğunda, sorun olarak yalnızca ilk geçersiz parametreyi belirtir.

Programcıyı harekete geçmeye zorlamak için bir uyarı vermeyi tercih etmemeyi tercih ederim, aksi takdirde sorunu görmezden gelebilir ve kaynakları boşa harcayabilir ya da istemeden kargola kültürebilirler. Hiçbir şey yapmamak bu açıdan daha da kötüdür.

Argümanlarım anlamlı mı? Bu tür şeyler üzerinde kabul edilmiş bir uygulama var mı?


Küçük bir teste dayanarak, test ettiğim tüm siteler, onlara verdiğim bilinmeyen parametreleri yok sayar.
Bart van Ingen Schenau

@BartvanIngenSchenau Burada da var. Web sayfaları için iyi ama gerçek bir API için uygun olduğunu düşünmüyorum
rath

2
Bir endişe ileriye dönük uyumluluktur. Bilinmeyen argümanlar göz ardı edilirse, istemcileri yeni API'ye programlayabilecek ve eski sunucularda makul davranışlar elde edebilecek şekilde gelecek sürümlerde kullanmak mümkündür.
Walpen

@walpen Bu ilginç bir nokta. Sürümlü URL'ler api/v1vb. Kullanmak bununla ilgilenir, ancak yine de artımlı güncellemelere izin vermez. +1
rath

Burada gerçek canlı perspektiften bazı pro ve eksileri bulabilirsiniz: Sıkı Parametreler ve API'niz .
Remek Ambroziak

Yanıtlar:


12

Bence, Geçersiz İstek durumunu döndürmelisiniz, böylece müşteri yapmaya çalıştığı şeyin geçerli olmadığını bilir. Bu konudaki düşüncem RESTful API'lerin keşfedilebilir olduğu konseptinden etkileniyor . Önde yeterli bilgi sağlıyorsanız, istemci asla başlamak için geçersiz bir istekte bulunmaya çalışmaz. Varsa, istemci kodunda bir sorun var ve hızlı başarısız olmak ikincisini bu hataya karşı uyaracaktır. Tabii ki, bu çok saf bir yaklaşım ve API'niz keşfedilemezse önerilmez.

Daha pragmatik bir yaklaşım, geçersiz parametreleri göz ardı etmek olabilir, ancak her iki şekilde de, davranışı iyi belgelediğinizden emin olun.


1
Uzantı olarak: bir istemci bilinmeyen / salt okunur / kullanımdan kaldırılmış parametreler gönderirse, bu, istemcinin yerine getirilmeyecek bir davranış beklediği anlamına gelir. Bu nedenle herhangi bir işlem yapmak tehlikelidir. Bu yüzden katılıyorum, kesinlikle Kötü İstek
Stepan Stepanov

Teşekkürler @StepanStepanov, ama web mimarisinin çoğunun altında yatan "Kabul ettiğiniz şeylere izin verdiğiniz, ne gönderdiğiniz konusunda açık olun" felsefesi var. Bunu göz önünde bulundurarak, daha önce yazdığım cevaplara doğrudan bir cevap yazabilirim.
RubberDuck

3
Bunu googledim)) Ve Postel'in yasasıyla ilgili sayfa da "girdi alan kod, anlam açık olduğu sürece uygunsuz girişi kabul etmelidir" diyor. Müşteri bize bilinmeyen bir parametre gönderirse, anlamı net olamaz. İstemci bize kullanımdan kaldırılmış bir parametre gönderirse bu açıktır, önceki gibi ve istemcinin beklediği gibi çalışmaz. İstemci bize salt okunur bir parametre gönderirse, açıktır, istemci istediği gibi yazılmaz.
Stepan Stepanov

0

Herkese açık API (veya başka bir ekip tarafından kullanılacak api) yaparsanız, @RubberDuck'un önerdiği gibi dönüş hatasını öneriyorum.

API'niz yalnızca ekibinizin içinde (veya yalnızca kendiniz) tüketilecekse, fazladan alanları göz ardı etmek daha kolay olabilir (örneğin daha az kod gerektirir ve yapılması daha kolaydır).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.