Kami meluncurkan API REST baru dan saya ingin beberapa masukan komunitas tentang praktik terbaik seputar bagaimana kami seharusnya memiliki parameter input yang diformat:
Saat ini, API kami sangat JSON-sentris (hanya mengembalikan JSON). Perdebatan tentang apakah kita ingin / perlu mengembalikan XML adalah masalah yang terpisah.
Karena output API kami adalah JSON centric, kami telah menempuh jalan di mana input kami sedikit JSON centric dan saya telah berpikir bahwa mungkin nyaman untuk beberapa tetapi aneh pada umumnya.
Misalnya, untuk mendapatkan beberapa detail produk di mana beberapa produk dapat ditarik sekaligus saat ini kami miliki:
http://our.api.com/Product?id=["101404","7267261"]
Haruskah kita menyederhanakan ini sebagai:
http://our.api.com/Product?id=101404,7267261
Atau apakah memiliki input JSON berguna? Lebih sakit?
Kami mungkin ingin menerima kedua gaya tetapi apakah fleksibilitas itu sebenarnya menyebabkan lebih banyak kebingungan dan sakit kepala (rawatan, dokumentasi, dll.)?
Kasus yang lebih kompleks adalah ketika kami ingin menawarkan input yang lebih kompleks. Misalnya, jika kami ingin mengizinkan beberapa filter pada pencarian:
http://our.api.com/Search?term=pumas&filters={"productType":["Clothing","Bags"],"color":["Black","Red"]}
Kami tidak selalu ingin menempatkan jenis filter (mis. Jenis produk dan warna) sebagai nama permintaan seperti ini:
http://our.api.com/Search?term=pumas&productType=["Clothing","Bags"]&color=["Black","Red"]
Karena kami ingin mengelompokkan semua input filter bersama.
Pada akhirnya, apakah ini benar-benar penting? Mungkin ada begitu banyak utiliti JSON di luar sana sehingga tipe input tidak terlalu penting.
Saya tahu klien JavaScript kami yang melakukan panggilan AJAX ke API dapat menghargai input JSON untuk membuat hidup mereka lebih mudah.
[]
sintaksis tidak selalu didukung (dan meskipun umum, bahkan mungkin melanggar spesifikasi URI). Beberapa server HTTP dan bahasa pemrograman akan lebih suka hanya mengulangi namanya (misalnyaproductType=value1&productType=value2
).