Saya sedang dalam proses membuat API REST dan saat ini, saya menghadapi masalah berikut:
Fooadalah sumber pertama. Operasi CRUD dapat diterapkan melalui/foo/URI.Baradalah sumber kedua. Operasi CRUD dapat diterapkan melalui/bar/URI.- Setiap
Foodikaitkan dengan nol atau satuBar. Alasan mengapa saya tidak memperlakukanBarsebagai sub-sumber dayaFooadalah karenaBarcontoh yang sama dapat dibagi antara mutipleFoos. Jadi saya pikir lebih baik untuk mengaksesnya melalui URI independen/foo/[id]/bar.
Masalah saya adalah bahwa dalam banyak kasus, klien yang meminta Foocontoh juga tertarik pada Barcontoh terkait . Saat ini, ini berarti bahwa mereka harus melakukan dua kueri alih-alih satu. Saya ingin memperkenalkan cara yang memungkinkan untuk mendapatkan kedua objek dengan satu permintaan tunggal, tapi saya tidak tahu bagaimana memodelkan API untuk melakukan itu. Apa yang saya dapatkan sejauh ini:
- Aku bisa memperkenalkan parameter permintaan seperti ini:
/foo/[id]?include_bar=true. Masalah dengan pendekatan ini adalah bahwa representasi sumber daya (misalnya struktur JSON) dari respons perlu terlihat berbeda (misalnya wadah seperti{ foo: ..., bar: ... }bukan hanya serialFoo), yang membuatFootitik akhir sumber daya "heterogen". Saya pikir itu bukan hal yang baik. Saat bertanya/foo, klien harus selalu mendapatkan representasi (struktur) sumber daya yang sama, terlepas dari parameter kueri. - Gagasan lain adalah untuk memperkenalkan titik akhir baca-saja yang baru, misalnya
/fooandbar/[foo-id]. Dalam hal ini, tidak ada masalah untuk mengembalikan representasi seperti{ foo: ..., bar: ... }, karena dengan demikian hanya representasi "resmi" darifooandbarsumber daya. Namun, saya tidak tahu apakah titik akhir pembantu seperti itu benar-benar tenang (ini sebabnya saya menulis "bisa" di judul pertanyaan. Tentu saja secara teknis memungkinkan, tetapi saya tidak tahu apakah itu ide yang bagus).
Bagaimana menurut anda? Apakah ada kemungkinan lain?
Bartidak dapat ada tanpa dikaitkan dengan a Foo. Namun, seperti yang saya tulis di atas, mungkin saja beberapa Foos berbagi sama Bar. Seharusnya dimungkinkan untuk membuat Footanpa Barterkait, jadi saya tidak berpikir Barharus diperlakukan sebagai orang tua.