Wir starten eine neue REST-API und ich wollte einige Community-Beiträge zu Best Practices für die Formatierung von Eingabeparametern:
Derzeit ist unsere API sehr JSON-zentriert (gibt nur JSON zurück). Die Debatte darüber, ob wir XML zurückgeben wollen / müssen, ist ein separates Thema.
Da unsere API-Ausgabe JSON-zentriert ist, haben wir einen Weg eingeschlagen, in dem unsere Eingaben etwas JSON-zentriert sind, und ich habe gedacht, dass dies für einige praktisch, aber im Allgemeinen seltsam sein könnte.
Um beispielsweise einige Produktdetails zu erhalten, bei denen mehrere Produkte gleichzeitig abgerufen werden können, haben wir derzeit:
http://our.api.com/Product?id=["101404","7267261"]
Sollten wir dies vereinfachen als:
http://our.api.com/Product?id=101404,7267261
Oder ist eine JSON-Eingabe praktisch? Eher ein Schmerz?
Wir möchten vielleicht beide Stile akzeptieren, aber verursacht diese Flexibilität tatsächlich mehr Verwirrung und Kopfschmerzen (Wartbarkeit, Dokumentation usw.)?
Ein komplexerer Fall ist, wenn wir komplexere Eingaben anbieten möchten. Wenn wir beispielsweise mehrere Filter für die Suche zulassen möchten:
http://our.api.com/Search?term=pumas&filters={"productType":["Clothing","Bags"],"color":["Black","Red"]}
Wir möchten die Filtertypen (z. B. Produkttyp und Farbe) nicht unbedingt als Anforderungsnamen wie folgt einfügen:
http://our.api.com/Search?term=pumas&productType=["Clothing","Bags"]&color=["Black","Red"]
Weil wir alle Filtereingaben zusammenfassen wollten.
Ist das am Ende wirklich wichtig? Es ist wahrscheinlich, dass es so viele JSON-Utils gibt, dass der Eingabetyp einfach nicht so wichtig ist.
Ich weiß, dass unsere JavaScript-Clients, die AJAX-Aufrufe an die API ausführen, die JSON-Eingaben möglicherweise schätzen, um ihnen das Leben zu erleichtern.
[]
Syntax nicht immer unterstützt wird (und obwohl sie häufig vorkommt, sogar gegen die URI-Spezifikation verstoßen kann). Einige HTTP-Server und Programmiersprachen bevorzugen es, nur den Namen zu wiederholen (zproductType=value1&productType=value2
. B. ).