Tampilan URL Anda tidak ada hubungannya dengan REST. Apapun itu. Ini sebenarnya adalah "detail implementasi". Jadi sama seperti bagaimana Anda memberi nama variabel Anda. Mereka harus unik dan tahan lama.
Jangan buang waktu terlalu banyak untuk hal ini, buat saja pilihan dan tetaplah konsisten / konsisten. Misalnya jika Anda menggunakan hierarki maka Anda melakukannya untuk semua sumber daya Anda. Jika Anda menggunakan parameter kueri ... dll seperti halnya penamaan konvensi dalam kode Anda.
Kenapa begitu ? Sejauh yang saya tahu, API "RESTful" harus dapat dijelajahi (Anda tahu ... "Hypermedia sebagai Engine of Application State"), oleh karena itu klien API tidak peduli tentang seperti apa URL Anda asalkan URL mereka valid (tidak ada SEO, tidak ada manusia yang perlu membaca "url ramah" itu, kecuali mungkin untuk debugging ...)
Seberapa bagus / mudah dimengerti URL dalam REST API hanya menarik bagi Anda sebagai pengembang API, bukan klien API, seperti halnya nama variabel dalam kode Anda.
Yang paling penting adalah klien API Anda tahu cara menginterpretasikan tipe media Anda. Misalnya tahu bahwa:
- tipe media Anda memiliki properti tautan yang mencantumkan tautan yang tersedia / terkait.
- Setiap tautan diidentifikasi oleh suatu hubungan (seperti halnya browser tahu bahwa tautan [rel = "stylesheet"] berarti lembar gaya atau rel = favico adalah tautan ke favicon ...)
- dan diketahui apa arti hubungan itu ("perusahaan" berarti daftar perusahaan, "pencarian" berarti url templated untuk melakukan pencarian pada daftar sumber daya, "departemen" berarti departemen dari sumber daya saat ini)
Di bawah ini adalah contoh pertukaran HTTP (badan berada di yaml karena lebih mudah untuk menulis):
Permintaan
GET / HTTP/1.1
Host: api.acme.io
Accept: text/yaml, text/acme-mediatype+yaml
Respons: daftar tautan ke sumber daya utama (perusahaan, orang, apa pun ...)
HTTP/1.1 200 OK
Date: Tue, 05 Apr 2016 15:04:00 GMT
Last-Modified: Tue, 05 Apr 2016 00:00:00 GMT
Content-Type: text/acme-mediatype+yaml
# body: this is your API's entrypoint (like a homepage)
links:
# could be some random path https://api.acme.local/modskmklmkdsml
# the only thing the API client cares about is the key (or rel) "companies"
companies: https://api.acme.local/companies
people: https://api.acme.local/people
Permintaan: tautan ke perusahaan (menggunakan body.links.companies respons sebelumnya)
GET /companies HTTP/1.1
Host: api.acme.local
Accept: text/yaml, text/acme-mediatype+yaml
Respons: sebagian daftar perusahaan (di bawah item), sumber daya tersebut berisi tautan terkait, seperti tautan untuk mendapatkan pasangan perusahaan berikutnya (body.links.next) tautan lain (templated) untuk pencarian (body.links.search)
HTTP/1.1 200 OK
Date: Tue, 05 Apr 2016 15:06:00 GMT
Last-Modified: Tue, 05 Apr 2016 00:00:00 GMT
Content-Type: text/acme-mediatype+yaml
# body: representation of a list of companies
links:
# link to the next page
next: https://api.acme.local/companies?page=2
# templated link for search
search: https://api.acme.local/companies?query={query}
# you could provide available actions related to this resource
actions:
add:
href: https://api.acme.local/companies
method: POST
items:
- name: company1
links:
self: https://api.acme.local/companies/8er13eo
# and here is the link to departments
# again the client only cares about the key department
department: https://api.acme.local/companies/8er13eo/departments
- name: company2
links:
self: https://api.acme.local/companies/9r13d4l
# or could be in some other location !
department: https://api2.acme.local/departments?company=8er13eo
Jadi seperti yang Anda lihat jika Anda membuka tautan / hubungan dengan cara Anda menyusun bagian jalur URL Anda tidak memiliki nilai apa pun untuk klien API Anda. Dan jika Anda mengkomunikasikan struktur URL Anda kepada klien Anda sebagai dokumentasi, maka Anda tidak melakukan REST (atau setidaknya bukan Level 3 sesuai " model jatuh tempo Richardson ")