The R di SISA singkatan sumber daya
(Yang tidak benar, karena mewakili Representasi, tetapi itu adalah trik yang baik untuk mengingat pentingnya Sumberdaya di REST).
Tentang PUT /groups/api/v1/groups/{group id}/status/activate
: Anda tidak memperbarui "aktifkan". "Aktifkan" bukanlah sesuatu, itu kata kerja. Kata kerja tidak pernah sumber daya yang baik. Aturan praktis: jika tindakan, kata kerja, ada di URL, itu mungkin tidak tenang .
Apa yang kamu lakukan? Entah Anda "menambahkan", "menghapus" atau "memperbarui" suatu aktivasi pada suatu Grup, atau jika Anda lebih suka: memanipulasi "status" -asumber daya pada suatu Grup. Secara pribadi, saya akan menggunakan "aktivasi" karena mereka kurang ambigu daripada konsep "status": membuat status ambigu, membuat aktivasi tidak.
POST /groups/{group id}/activation
Membuat (atau meminta pembuatan) aktivasi.
PATCH /groups/{group id}/activation
Memperbarui beberapa detail dari aktivasi yang ada. Karena grup hanya memiliki satu aktivasi, kami tahu sumber daya aktivasi yang kami maksud.
PUT /groups/{group id}/activation
Menyisipkan-atau-menggantikan aktivasi yang lama. Karena grup hanya memiliki satu aktivasi, kami tahu sumber daya aktivasi yang kami maksud.
DELETE /groups/{group id}/activation
Akan membatalkan, atau menghapus aktivasi.
Pola ini berguna ketika "aktivasi" Grup memiliki efek samping, seperti pembayaran yang dilakukan, surat yang dikirim dan sebagainya. Hanya POST dan PATCH yang memiliki efek samping seperti itu. Ketika mis. Penghapusan aktivasi harus, katakanlah, beri tahu pengguna melalui surat, DELETE bukanlah pilihan yang tepat; dalam hal ini Anda mungkin ingin menciptakan sumber daya penonaktifan : POST /groups/{group_id}/deactivation
.
Adalah ide yang baik untuk mengikuti pedoman ini, karena kontrak standar ini membuatnya sangat jelas untuk klien Anda, dan semua proksi dan lapisan antara klien dan Anda, tahu kapan aman untuk mencoba lagi, dan kapan tidak. Katakanlah klien berada di suatu tempat dengan wifi yang tidak stabil, dan penggunanya mengklik "nonaktifkan", yang memicu DELETE
: Jika gagal, klien hanya dapat mencoba lagi, sampai mendapat 404, 200 atau apa pun yang dapat ditangani. Tetapi jika itu memicu a POST to deactivation
ia tahu untuk tidak mencoba lagi: POST menyiratkan ini.
Setiap klien sekarang memiliki kontrak, yang, ketika diikuti, akan melindungi terhadap pengiriman 42 email "grup Anda telah dinonaktifkan", hanya karena perpustakaan HTTP-nya terus mencoba kembali panggilan ke backend.
Memperbarui satu atribut: gunakan PATCH
PATCH /groups/{group id}
Jika Anda ingin memperbarui atribut. Misalnya "status" bisa menjadi atribut pada Grup yang dapat diatur. Atribut seperti "status" seringkali merupakan kandidat yang baik untuk dibatasi pada daftar putih nilai. Contoh menggunakan beberapa skema JSON yang tidak ditentukan:
PATCH /groups/{group id} { "attributes": { "status": "active" } }
response: 200 OK
PATCH /groups/{group id} { "attributes": { "status": "deleted" } }
response: 406 Not Acceptable
Mengganti sumber daya, tanpa efek samping menggunakan PUT.
PUT /groups/{group id}
Jika Anda ingin mengganti seluruh Grup. Ini tidak selalu berarti bahwa server benar-benar membuat grup baru dan membuang yang lama, misalnya id mungkin tetap sama. Tetapi untuk klien, inilah yang dapat PUT maksud: klien harus berasumsi bahwa ia mendapatkan item yang sama sekali baru, berdasarkan respons server.
Klien harus, dalam hal PUT
permintaan, selalu mengirim seluruh sumber daya, memiliki semua data yang diperlukan untuk membuat item baru: biasanya data yang sama seperti yang dibutuhkan oleh POST-create.
PUT /groups/{group id} { "attributes": { "status": "active" } }
response: 406 Not Acceptable
PUT /groups/{group id} { "attributes": { "name": .... etc. "status": "active" } }
response: 201 Created or 200 OK, depending on whether we made a new one.
Persyaratan yang sangat penting PUT
adalah idempoten: jika Anda memerlukan efek samping saat memperbarui Grup (atau mengubah aktivasi), Anda harus menggunakannya PATCH
. Jadi, ketika pembaruan menghasilkan misalnya mengirim surat, jangan gunakan PUT
.