1 Soalan: Bagaimana untuk POST, PATCH dan DELETE item dari pelbagai subdokumen menggunakan REST

soalan dicipta di Wed, May 8, 2019 12:00 AM

Katakan kita mempunyai dokumen Pengguna berikut:

{
  "_id": "1",
  "firstName": "Joe",
  "hobbies": [
     "_id": "1",
     "name": "music",
     "talented": true
   ],
}

Oleh itu katakan kami mahu POST, PATCH atau DELETE salah satu hobi Joey. Bagaimanakah kita perlu meneruskan penggunaan api api?

Saya fikir melakukan sesuatu seperti ini:

POST - /users/:id/hobbies


PATCH - /users/:id/hobbies/:id


DELETE - /users/:id/hobbies/:id

Ini nampaknya semantik dan mudah dibaca, tetapi sebaliknya, adalah salah untuk memasukkan nama subdokumen sebagai sumber kepada laluan, kerana ia merupakan subdokumen dan kepunyaan dokumen Pengguna utama.

Jadi, sebaliknya saya fikir adalah hanya membuat patch ke dokumen Pengguna utama:

PATCH - /users/:id/

Struktur laluan rehat mana yang betul untuk mencapai tugas ini?

    
0
1 Jawapan                              1                         
  

Katakan kita mempunyai dokumen Pengguna berikut   Bagaimanakah kita perlu meneruskan penggunaan api api?

Dengan merawat dokumen seperti dokumen: membuat pengeditan secara setempat, dan hantar hasil kembali ke pelayan.

Dengan mengandaikan bahawa dokumen ini boleh didapati di /users/1/, kami akan menghantar semula perwakilan dengan hobi dikeluarkan ...
PUT /users/1/

{
  "_id": "1",
  "firstName": "Joe",
  "hobbies": [
   ],
}

Menggunakan PATCH dan bukan PUT adalah baik (dengan syarat kami menghantar dokumen patch sebagai mesej-badan). Secara teknikal, anda juga boleh menggunakan POST, tetapi POST tidak benar-benar menawarkan kelebihan anda di sini.

/users/:id/hobbies
/users/:id/hobbies/:id

Masalah dengan menggunakan pengenalpastian seperti ini, pelanggan generik tidak akan menyedari bahawa mereka mempunyai kaitan dengan /users/:id/ - jadi walaupun anda menghantar mesej untuk memadam hobi, salinan cached tempatan klien tidak akan dikemas kini (kerana menggunakan kekunci yang berbeza).

Sekarang, jika sumber anda direka menggunakan pautan

{
  "_id": "1",
  "firstName": "Joe",
  "hobbies": [ { "href": "/users/1/hobbies/4" } ]
}

Kemudian kami masih menggunakan /users/1/ untuk menambahkan /membuang hobi dari koleksi, tetapi jika kami mahu mengubah perwakilan hobi itu sendiri, maka kami akan menghantar mesej menggunakan /users/1/hobbies/4.

Jika koleksi hobi itu sendiri adalah pautan ...

{
  "_id": "1",
  "firstName": "Joe",
  "hobbies": "/users/1/hobbies"
}

Kemudian kami akan menambah /mengeluarkan hobi dengan menghantar mesej ke /users/1/hobbies.

Ini boleh membantu memikirkan halaman web - perwakilan HTML halaman web sering akan menyertakan pautan ke imej atau skrip yang diambil dan di cache secara berasingan dari halaman itu sendiri. Jika kami ingin mengedit HTML, kami akan menghantar permintaan menggunakan pengecam untuk halaman, jika kami ingin mengubah skrip, kami akan menghantar pengenal untuk skrip.

    
1
2019-05-08 17: 58: 33Z
sumber diletakkan di sini