Mendesain API, kami menemukan pertanyaan apakah muatan PUT harus berisi ID sumber daya yang diperbarui.
Inilah yang saat ini kami miliki:
PUT /users/123 Payload: {name: "Adrian"}
Kode rute kami mengekstraksi ID dari URI dan melanjutkan pembaruan.
Pengguna pertama API kami mempertanyakan mengapa kami tidak mengizinkan ID dalam muatan:
PUT /users/123 Payload: {id: 123, name: "Adrian"}
Alasan kami tidak mengizinkannya adalah karena ID digandakan, dalam payload dan URI.
Memikirkan hal ini lagi, kami menggabungkan sumber daya ke URI.
Jika URI tidak memiliki ID, payload perlu diubah:
PUT /no/id/here Payload: {name: "Adrian"} < What user???
Apakah ada alasan untuk tidak melakukannya?
/users
(tidak perlu menambahkan 'baru').Jawaban untuk pertanyaan ini tergantung pada apakah Anda ingin mengizinkan klien untuk mengubah ID?
Jika klien dapat mengubah ID, melalui PUT, maka URI untuk sumber daya akan berubah, dan Anda harus memberikan 301 Pindah Secara Permanen kapan saja sumber daya mengakses URI yang lama.
Jadi misalnya Anda mulai dengan sumber daya di
dan klien PUT berikut ini ke sumber daya
sumber daya telah diperbarui dan URI-nya sekarang
The
Location
lapangan di respon PUT harus berisi URI baru, dan jika Anda pergi ke/users/123
Anda harus mendapatkan301
respon dengan Lokasi lapangan menunjuk ke baru/users/222
sumber daya.Dalam kebanyakan kasus, Anda sebenarnya tidak ingin klien dapat mengubah ID, karena ini bisa menjadi sangat berantakan dengan cepat. Dalam hal ini ID adalah sesuatu yang hanya dapat diubah oleh server, dan Anda harus meninggalkannya dari tubuh PUT, karena klien tidak dapat memperbarui keadaan ini.
Jika Anda PUT suatu kebutuhan untuk URI berbeda pada sumber daya yang sama, katakanlah
maka jika sumber daya itu tidak ada server harus membuat dan membuat dan ID ketika sedang melakukannya
sumber