Saya mencoba merangkul kepala saya di sekitar cara terbaik untuk mengatasi konsep dalam API berbasis REST. Sumber daya datar yang tidak mengandung sumber daya lain tidak masalah. Tempat saya mengalami masalah adalah sumber daya yang kompleks.
Misalnya, saya punya sumber daya untuk buku komik. ComicBook
memiliki segala macam properti pada rasanya author
, issue number
, date
, dll
Buku komik juga memiliki daftar 1..n
sampul. Penutup ini adalah benda yang kompleks. Mereka berisi banyak informasi tentang sampul: artis, tanggal, dan bahkan gambar dasar 64 yang disandikan dari sampul.
Untuk GET
di ComicBook
saya hanya bisa mengembalikan komik, dan semua selimut termasuk gambar mereka base64'ed. Itu mungkin bukan masalah besar untuk mendapatkan komik tunggal. Tapi misalkan saya sedang membangun aplikasi klien yang ingin membuat daftar semua komik dalam sistem dalam sebuah tabel.
Tabel akan berisi beberapa properti dari ComicBook
sumber daya, tetapi kami tentu tidak ingin menampilkan semua sampul dalam tabel. Mengembalikan 1000 buku komik, masing-masing dengan beberapa sampul akan menghasilkan data dalam jumlah sangat besar yang datang dari kawat, data yang tidak perlu bagi pengguna akhir dalam kasus itu.
Naluriku adalah membuat Cover
sumber daya dan memiliki ComicBook
sampul. Jadi sekarang Cover
adalah URI. GET
pada buku komik berfungsi sekarang, alih-alih Cover
sumber daya besar yang kami kirim kembali URI untuk setiap sampul dan klien dapat mengambil sumber daya Sampul saat mereka membutuhkannya.
Sekarang saya punya masalah dengan membuat komik baru. Tentunya saya akan ingin membuat setidaknya satu sampul ketika saya membuat Comic
, pada kenyataannya itu mungkin aturan bisnis.
Jadi sekarang aku terjebak, aku baik memaksa klien untuk menegakkan aturan bisnis dengan terlebih dahulu mengirimkan Cover
, mendapatkan URI untuk menutupi itu, maka POST
ing ComicBook
dengan yang URI dalam daftar, atau saya POST
di ComicBook
mengambil di sumber daya tampak berbeda dari yang meludah di luar. Sumber daya yang masuk untuk POST
dan GET
merupakan salinan yang dalam, di mana yang keluar GET
berisi referensi ke sumber daya yang tergantung.
Sumber Cover
daya mungkin diperlukan dalam hal apa pun karena saya yakin sebagai klien saya ingin membahas arah sampul dalam beberapa kasus. Jadi masalahnya ada dalam bentuk umum terlepas dari ukuran sumber daya dependen. Secara umum bagaimana Anda menangani sumber daya yang kompleks tanpa memaksa klien untuk hanya "tahu" bagaimana sumber daya itu disusun?