Apa cara yang tepat untuk bersarang sumber daya dalam model REST?


14

Saya merancang API layanan REST dan macet di jalan yang tepat ke sumber daya sarang.

Sumber daya: mitra, tiket, pengaturan

Koneksi antara sumber daya:

  • mitra memiliki banyak tiket,
  • mitra memiliki set pengaturan,

Logika bisnis:

  • Anda dapat mencantumkan semua mitra sebagai pengguna anonim,
  • Anda dapat menambahkan tiket baru ke mitra yang ditentukan sebagai pengguna anonim,
  • hanya mitra yang dapat mendaftarkan tiketnya,
  • hanya mitra yang dapat memodifikasi tiketnya,
  • hanya mitra yang dapat membuat daftar pengaturan,
  • hanya mitra yang dapat mengubah pengaturan,

Apa yang saya lakukan sampai sekarang:

Sumber daya mitra

GET / mitra - daftarkan semua mitra
GET / mitra /: id - tampilkan detail mitra yang ditentukan oleh: parameter id
GET / mitra /: partner_id / tiket - daftar tiket
mitra GET / mitra /: partner_id / tiket /: id - detail tiket mitra yang ditentukan
POST / mitra /: partner_id / tiket - menyimpan
PUT tiket baru / mitra /: partner_id / tiket /: id - memperbarui tiket yang ditentukan oleh: parameter id
DAPATKAN / mitra /: mitra_id / pengaturan - daftar pengaturan mitra
PUT / partners /: partner_id / settings - perbarui pengaturan mitra

Masalah / pertanyaan

Apakah itu cara yang tepat untuk membagi sumber daya bersarang (tiket, pengaturan) untuk memisahkan sumber daya atau menggandakannya sebagai sumber daya terpisah?

Misalnya

DAPATKAN / tiket /: id
POST / tiket
PUT / tiket /: id

DAPATKAN /
PUT pengaturan / pengaturan

Jawaban:


8

HATEOAS :

GET /partners/:partner_id/tickets - daftar tiket mitra, yaitu, mengembalikan daftar URI, mungkin dari formulir /tickets/:id

GET /partners/:partner_id/tickets/:id - tidak dibutuhkan

POST /partners/:partner_id/tickets - Membuat tiket dan rekan ke mitra, mengembalikan 201 dengan URI baru, dari formulir /tickets/:id


2
Sekarang saya lebih mengerti. Terima kasih banyak :) Tetapi bagaimana dengan kinerja? Anggap situasi itu: Anda ingin membuat daftar tiket dengan beberapa informasi singkat. Anda harus meminta daftar tiket untuk mitra dan setelah itu meminta setiap tiket secara individual. Apakah saya benar?
— Przemek

Baiklah. atau Anda dapat membuat /partners/:partner_id/ticketsdaftar menyertakan beberapa data yang berguna untuk setiap tiket, bukan hanya URI kanonik tiket. Sebagai contoh, di JSON bisa jadi [{href='/tickets/12',value=10,due='2013-08-13'},{href='/tickets/18',value=7,due='2013-09-02'}], klien dapat segera menunjukkan beberapa tabel, dan DAPATKAN / PUT sumber daya tiket penuh untuk manipulasi tambahan.
— Javier

OK, sudah jelas.
— Przemek

BTW. Untuk / mitra /: mitra_id / tiket haruskah dokumen disediakan di bagian sumber daya mitra atau tiket?
— Przemek

@Javier bagaimana dengan DELETE? DELETE /tickets/:id?
— Mengdi Gao
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.