Stiamo lanciando una nuova API REST e volevo alcuni input della community sulle migliori pratiche su come dovremmo avere formattato i parametri di input:
Al momento, la nostra API è molto incentrata su JSON (restituisce solo JSON). Il dibattito sulla necessità o meno di restituire XML è un problema separato.
Poiché il nostro output API è incentrato su JSON, abbiamo seguito un percorso in cui i nostri input sono un po 'incentrati su JSON e ho pensato che potrebbe essere conveniente per alcuni ma strano in generale.
Ad esempio, per ottenere alcuni dettagli del prodotto in cui è possibile estrarre più prodotti contemporaneamente, al momento disponiamo di:
http://our.api.com/Product?id=["101404","7267261"]
Dovremmo semplificare questo come:
http://our.api.com/Product?id=101404,7267261
O avere un input JSON a portata di mano? Più di un dolore?
Potremmo voler accettare entrambi gli stili, ma questa flessibilità provoca effettivamente maggiore confusione e mal di testa (manutenibilità, documentazione, ecc.)?
Un caso più complesso è quando vogliamo offrire input più complessi. Ad esempio, se vogliamo consentire più filtri nella ricerca:
http://our.api.com/Search?term=pumas&filters={"productType":["Clothing","Bags"],"color":["Black","Red"]}
Non vogliamo necessariamente mettere i tipi di filtro (es. ProductType e color) come nomi di richieste come questo:
http://our.api.com/Search?term=pumas&productType=["Clothing","Bags"]&color=["Black","Red"]
Perché volevamo raggruppare tutti gli input di filtro insieme.
Alla fine, importa davvero? Potrebbe essere probabile che ci siano così tanti programmi di utilità JSON là fuori che il tipo di input non ha molta importanza.
So che i nostri client JavaScript che effettuano chiamate AJAX all'API possono apprezzare gli input JSON per semplificarne la vita.
[]
sintassi non è sempre supportata (e nonostante sia comune, potrebbe persino violare le specifiche URI). Alcuni server HTTP e linguaggi di programmazione preferiranno semplicemente ripetere il nome (ad esproductType=value1&productType=value2
.).