Saya telah berdebat tentang apa yang harus dilakukan dengan garis miring di API ISTIRAHAT.
Katakanlah saya memiliki sumber daya yang disebut anjing dan sumber daya bawahan untuk masing-masing anjing. Karena itu kami dapat melakukan hal berikut:
GET/PUT/POST/DELETE http://example.com/dogs
GET/PUT/POST/DELETE http://example.com/dogs/{id}
Tetapi apa yang kita lakukan dengan kasus khusus berikut:
GET/PUT/POST/DELETE http://example.com/dogs/
Pandangan pribadi saya adalah ini mengatakan kirim permintaan ke sumber daya anjing individual dengan id = null
. Saya pikir API harus mengembalikan 404 untuk kasus ini.
Yang lain mengatakan permintaan tersebut mengakses sumber daya anjing yaitu garis miring trailing diabaikan.
Adakah yang tahu jawaban pasti?
dogs
dandogs/
setara. Bagi saya jelas itudogs/
adalah direktori yang berisi masing-masing anjing. Itu kurang jelas apadogs
itu, tapi saya akan memperlakukannya sebagai setara, seperti kebanyakan webservers menerima akses ke direktori tanpa jejak/
.Jawaban:
Tak satu pun dari ini adalah otoritatif (karena REST tidak memiliki makna yang tepat). Tetapi dari makalah asli pada REST, URL lengkap (tidak berakhir pada /) menamai sumber daya, sedangkan yang berakhiran garis miring '/' adalah grup sumber daya (mungkin tidak dituliskan seperti itu).
GET dari URL dengan garis miring di bagian akhir seharusnya mencantumkan sumber daya yang tersedia.
PUT pada URL dengan garis miring seharusnya menggantikan semua sumber daya.
HAPUS pada URL dengan garis miring seharusnya menghapus semua sumber
POST pada URL dengan garis miring seharusnya membuat sumber daya baru kemudian dapat diakses. Agar sesuai, sumber daya baru harus ada di direktori ini (meskipun banyak arsitektur ISTIRAH curang di sini).
dll.
Halaman wiki pada subjek tampaknya menjelaskannya dengan baik:
Lihat contoh https://en.wikipedia.org/wiki/Representational_state_transfer#Applied_to_Web_services .
sumber
/
/
?GET http://example.com/dogs
dapat mengembalikan informasi meta tentang anjing (bukan daftar itu sendiri tetapi informasi meta tentang daftar anjing). Mungkin atau mungkin ini sebuah kesalahan.As the last character within a URI’s path, a forward slash (/) adds no semantic value and may cause confusion. It’s better to drop them completely.
Ini bukan satu-satunya tempat yang menyarankan untuk tidak menggunakan slash pelatihanTidak ada satu karena tidak ada dokumen resmi tentang apa yang diperlukan untuk layanan yang dianggap tenang.
Yang mengatakan saya akan membiarkan garis miring hanya untuk kemudahan penggunaan. Sementara secara teknis ini dapat dilihat sebagai upaya untuk mengakses anjing dengan ID nol; Saya tidak melihat pengguna melakukan lompatan ini kecuali mereka telah membacanya di dokumentasi Anda. Saya dapat melihat pengguna yang mencoba menulis kode terhadap API Anda dan memasukkan garis miring hanya dari kebiasaan dan bertanya-tanya mengapa mereka mendapat respons 404 ketika mereka menginginkan daftar anjing.
sumber
example.com/dogs
adalah sumber daya yang sepenuhnya independen dari sumber daya apa punexample.com/dogs/X
. Jadi DELETE padaexample.com/dogs
tidak harus menghapus semua anjing / * (meskipun bisa jika itu adalah semantik). Tetapi DELETEexample.com/dogs/
harus menghapus semua anjing / *.foo
,foo/
danfoo////
identik. Pada dasarnya sepertinya menghapus segmen jalur kosong. Jadi, jika Anda mengikuti pendekatan yang sama dengan layanan REST Anda,dogs
dandogs/
akan merujuk pada hal yang sama.Dua arah.
Metode 1
Selalu gunakan garis miring untuk sumber daya apa pun yang mungkin mengandung anak-anak.
Coba pertimbangkan "DAPATKAN" pada direktori public_html dengan file.
Tidak mungkin ketika hello.html adalah file:
Tetapi mungkin ketika hello.html adalah direktori:
Jadi, jika "hello.html" dapat memiliki anak maka selalu dan selamanya "/hello.html/" dan "/hello.html/index.html" (atau cukup /hello.html/) adalah daftar anak-anak ini .
Metode 2
Jadilah cerdas".
Perintah find tidak peduli dengan jenis hello.html. Direktori atau file, siapa peduli, itu adalah nama objek. Saat kami menulis "cp youagain.html hello.html", cp dapat mengetahui cara menangani hello.html. cp pintar. Server web Anda juga cerdas. Ini memiliki perpustakaan penanganan jalur. Ini memiliki routing. Itu dapat membuat stat dan memberi tahu Anda jika sebuah nama adalah objek atau direktori. Itu dapat mengarahkan bla ke bla / atau bahkan hanya menyajikan tanggapan yang sama untuk keduanya. Ini luar biasa !!! cara. Begitu banyak teknologi. Siapa yang mau hanya menyatukan string path ketika kita bisa melakukan semua itu ???
sumber