आपके URL कैसे दिखते हैं, इससे REST का कोई लेना-देना नहीं है। कुछ भी हो जाता। यह वास्तव में एक "कार्यान्वयन विवरण" है। तो जैसे आप अपने चर का नाम कैसे लेते हैं। उन्हें केवल अद्वितीय और टिकाऊ होना है।
इस पर बहुत अधिक समय बर्बाद न करें, बस एक विकल्प बनाएं और उसके अनुरूप रहें / सुसंगत रहें। उदाहरण के लिए यदि आप पदानुक्रम के साथ जाते हैं तो आप इसे अपने सभी संसाधनों के लिए करते हैं। यदि आप अपने मापदंडों में नामकरण सम्मेलनों की तरह ही क्वेरी पैरामीटर ... आदि के साथ जाते हैं।
ऐसा क्यों ? जहाँ तक मुझे पता है कि एक "रेस्टफुल" एपीआई को ब्राउज़ करने योग्य होना चाहिए (आप जानते हैं ... "हाइपरमेडिया ऑफ़ द इंजन ऑफ़ स्टेट"), इसलिए एक एपीआई क्लाइंट को इस बात की परवाह नहीं है कि आपके URL जितने लंबे हैं उतने लंबे मान्य (कोई SEO नहीं है, कोई भी मानव जिसे "दोस्ताना यूआरएल" पढ़ने की ज़रूरत नहीं है, सिवाय डीबगिंग के ...)
REST API में URL कितना अच्छा / समझ में आता है, यह आपके लिए केवल API डेवलपर के रूप में दिलचस्प है, API क्लाइंट के रूप में नहीं, जैसा कि आपके कोड में एक चर का नाम होगा।
सबसे महत्वपूर्ण बात यह है कि आपका एपीआई क्लाइंट आपके मीडिया प्रकार की व्याख्या करना जानता है। उदाहरण के लिए यह जानता है कि:
- आपके मीडिया प्रकार में एक लिंक प्रॉपर्टी है जो उपलब्ध / संबंधित लिंक को सूचीबद्ध करती है।
- प्रत्येक लिंक को एक संबंध द्वारा पहचाना जाता है (जैसे ब्राउज़र जानते हैं कि लिंक [rel = "स्टाइलशीट"] का अर्थ है इसकी स्टाइल शीट या rel = favico एक favicon के लिए एक लिंक है ...)
- और यह पता है कि उन रिश्तों का क्या मतलब है ("कंपनियों" का मतलब कंपनियों की सूची है, "खोज" का अर्थ है संसाधन की सूची पर खोज करने के लिए एक टेम्पर्ड यूरल, "विभागों" का अर्थ है वर्तमान संसाधन के विभाग)
नीचे एक उदाहरण है HTTP एक्सचेंज (निकाय याम्ल में हैं क्योंकि यह लिखना आसान है):
निवेदन
GET / HTTP/1.1
Host: api.acme.io
Accept: text/yaml, text/acme-mediatype+yaml
प्रतिक्रिया: मुख्य संसाधन (कंपनियों, लोगों, जो भी ...) के लिंक की एक सूची
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
अनुरोध: कंपनियों से लिंक
GET /companies HTTP/1.1
Host: api.acme.local
Accept: text/yaml, text/acme-mediatype+yaml
प्रतिक्रिया: कंपनियों की एक आंशिक सूची (आइटम के तहत), संसाधन में संबंधित लिंक होते हैं, जैसे कि कंपनियों के अगले जोड़े को प्राप्त करने के लिए लिंक (body.links.next) खोज (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
इसलिए जैसा कि आप देखते हैं कि यदि आप लिंक / संबंध बनाते हैं, तो आप अपने URL के पथ भाग की संरचना कैसे करते हैं, इसका आपके API क्लाइंट के लिए कोई मूल्य नहीं है। और यदि आप अपने ग्राहक को अपने URL की संरचना को दस्तावेज़ीकरण के रूप में बता रहे हैं, तो आप REST (या कम से कम 3 स्तर " रिचर्डसन की परिपक्वता मॉडल " के अनुसार नहीं कर रहे हैं )