Respons yang tepat untuk menyisipkan REST - catatan baru lengkap, atau hanya nilai id rekaman?

15

Saya sedang membangun REST API yang memungkinkan sisipan (POST, bukan idempoten) dan pembaruan (PUT, idempoten) permintaan untuk menambah / memperbarui database ke aplikasi kita.

Saya bertanya-tanya apakah ada standar atau praktik terbaik mengenai data apa yang kami kirim kembali ke klien sebagai respons untuk operasi POST (insert). Kami harus mengirim kembali setidaknya nilai ID rekaman (mis. Rekor baru Anda adalah rekor # 1234).

Haruskah kita merespons dengan objek penuh? (mis. pada dasarnya respons yang sama dengan yang mereka dapatkan dari permintaan "GET / object_type / 1234")

Haruskah kita merespons hanya dengan nilai ID baru? (mis. "{id: 1234}", yang berarti bahwa jika mereka ingin mengambil seluruh catatan, mereka perlu melakukan permintaan HTTP GET tambahan untuk mendapatkan catatan lengkap)

Header pengarah mengarahkan mereka ke URL untuk objek lengkap?

Sesuatu yang lain sama sekali?

Keith Palmer Jr.
sumber
Saya oot yakin tentang praktek terbaik tapi bagi saya pribadi saya mungkin akan mempertimbangkan hanya mengembalikan id yang baru dibuat jika sukses jika -1 dll Jadilah tertarik untuk melihat apa yang orang lain katakan meskipun
dreza

Jawaban:

13

Nah, dalam antarmuka REST, mengikuti HTTP jika memungkinkan, saya akan mengembalikan 201 dan URI di bidang header Lokasi ke Sumber Daya yang baru dibuat. Inilah yang dikatakan Definisi Kode Status :

10.2.2 201 Dibuat

Permintaan telah dipenuhi dan menghasilkan sumber daya baru yang dibuat. Sumber daya yang baru dibuat dapat dirujuk oleh URI yang dikembalikan dalam entitas respons, dengan URI paling spesifik untuk sumber daya yang diberikan oleh bidang header Lokasi. Respons HARUS mencakup entitas yang berisi daftar karakteristik sumber daya dan lokasi dari mana pengguna atau agen pengguna dapat memilih yang paling tepat. Format entitas ditentukan oleh jenis media yang diberikan di bidang header Tipe Konten. Server asal HARUS membuat sumber daya sebelum mengembalikan kode status 201. Jika tindakan tidak dapat dilakukan segera, server HARUS merespons dengan 202 (Diterima) sebagai gantinya.

Jika terjadi kesalahan, saya berpendapat Anda tidak boleh kembali -1seperti yang dikatakan orang lain, tetapi hanya Kode Klien atau Server Kesalahan (4xx atau 5xx). Misalnya, jika pengguna tidak diizinkan membuat beberapa sumber daya baru, Anda cukup mengembalikan "401 Tidak Sah", tidak lebih dan tidak kurang.

Bruno Schäpper
sumber
Bagaimana dengan tubuh? kosong atau seluruh objek yang baru dibuat sebagai respons?
Pengembang
Dua opsi umum yang saya tahu adalah 1) mengatur header lokasi ke tempat entitas baru dapat ditemukan, atau, 2) termasuk entitas baru di dalam tubuh. Saya pribadi pergi dengan yang terakhir karena alasan praktis. Somtimes berpadu untuk perasaan yang lebih tenang;)
Bruno Schäpper