Saya membuat layanan RESTfull untuk struktur sumber daya seperti pohon dan bertanya-tanya seperti apa struktur URL yang terbaik?
Saya memiliki tiga persyaratan:
- bisa mendapatkan koleksi sumber daya root
- bisa mendapatkan sumber daya individual
- bisa mendapatkan koleksi sumber daya anak
Pikiran saya saat ini adalah:
/rest/documents
/rest/documents/{id}
/rest/documents/{id}/documents
Saya juga berpikir untuk pergi rute tunggal / jamak untuk menunjukkan daftar atau elemen individu, tetapi saya tahu saya akan memiliki sumber daya yang jamak yang sama dengan singular, jadi memutuskan menentang ini.
Adakah yang punya pemikiran di atas? atau memiliki cara penataan yang berbeda / lebih baik?
web-services
Matt Brailsford
sumber
sumber
Jawaban:
Apa yang terlintas dalam pikiran saya adalah: jangan biarkan Anda RESTful API mencerminkan kekambuhan dalam URL itu sendiri. Kalau dipikir-pikir, sumber daya Anda hanya dokumen.
Jika Anda menyimpan dokumen Anda secara fisik sesuai dengan struktur rekursif, buat pemetaan ke ID unik, dan gunakan ID di URL:
Sekarang, jika Anda memiliki dokumen Anda seperti ini:
permintaan akan berkonsultasi dengan url ini untuk
/abc/asd
dokumenJadi, sekarang Anda harus memberi pengguna API Anda sarana untuk melintasi struktur Anda dengan sedikit usaha. Itu bisa dilakukan dengan membungkus muatan respons Anda (dokumen) ke objek, yang berisi informasi traversal tambahan, seperti ini:
asalkan Anda berharap pengguna tidak membuat terlalu banyak dokumen dalam satu tingkat, Anda dapat memasukkan daftar anak-anak ke dalam respons. Jika bukan itu masalahnya Anda bisa menawarkan pengguna untuk mengambil ID dokumen anak seperti itu, memungkinkan misalnya untuk mem-paging hasil melalui parameter querystring:
Akhirnya, berbicara tentang parameter querystring, Anda juga bisa menyediakan informasi path secara langsung melalui parameter querystring:
Semua pendekatan yang disebutkan berharap bahwa dataran
GET /rest/documents
hanya mengembalikan dokumen root.sumber
Sesuatu seperti ini mungkin:
di mana {rootEntity} adalah titik awal koleksi Anda, {leafEntity} adalah sembarang simpul daun bernama di dalam pohon Anda.
Anda dapat menambahkan beberapa parameter di atas untuk memilih, mengatakan, Terbaru atau Semua atau sesuatu.
sumber