URL이 REST와 무관하게 보이는 방식. 무슨 일이든 상관 없습니다 실제로는 "구현 세부 사항"입니다. 변수 이름을 지정하는 것과 같습니다. 그들이 독특하고 내구성이 있어야합니다.
이것에 너무 많은 시간을 낭비하지 말고 선택하고 일관성을 유지하십시오. 예를 들어 계층 구조를 사용하는 경우 모든 리소스에 대해 수행합니다. 코드의 명명 규칙과 같은 쿼리 매개 변수 등을 사용하는 경우.
왜 그래? 내가 "RESTful"API를 탐색 할 수있는 한 ( "애플리케이션 상태 엔진의 하이퍼 미디어") API 클라이언트는 URL의 길이에 대해 신경 쓰지 않습니다. 유효한 (디버그가 없으며 디버깅을위한 경우를 제외하고는 "친숙한 URL"을 읽어야하는 사람이 없습니다 ...)
REST API에 URL이 얼마나 훌륭하고 이해할 수 있는지는 코드의 변수 이름처럼 API 클라이언트가 아니라 API 개발자로서 흥미로울 것입니다.
가장 중요한 것은 API 클라이언트가 미디어 유형을 해석하는 방법을 알고 있다는 것입니다. 예를 들어 다음을 알고 있습니다.
- 미디어 유형에는 사용 가능한 / 관련 링크를 나열하는 링크 속성이 있습니다.
- 각 링크는 관계로 식별됩니다 (브라우저가 link [rel = "stylesheet"]가 해당 스타일 시트를 의미하거나 rel = favico가 favicon에 대한 링크임을 의미 함)
- 이러한 관계의 의미를 알고 있습니다 ( "회사"는 회사 목록을 의미하고 "검색"은 자원 목록을 검색하기위한 템플릿 URL을 의미하고 "부서"는 현재 자원의 부서를 의미)
아래는 HTTP 교환의 예입니다 (작성하기 쉬우므로 본문이 yaml에 있음).
의뢰
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
요청 : 회사 링크 (이전 응답의 body.links.companies 사용)
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를 수행하지 않는 것입니다 (또는 " Richardson의 성숙도 모델 "에 따른 레벨 3 이상 ).