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

Przemek
sumber

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

Javier
sumber
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