@VoicesOfUnreason과 마찬가지로 HATEOAS URI는 변경할 수 있도록 URI가 검색 가능하고 문서화되지 않았습니다. 즉, 시스템에 들어가는 진입 점이 아니면 (클라이언트에 의해 하드 코딩 될 수있는 유일한 것임) Cool URIs - 나머지 부분을 진화시키는 기능을 원한다면 너무 많이 사용해서는 안됩니다. 미래의 시스템의 URI 구조. 실제로 이것은 useful의 REST 기능 중 가장 큰 기능 중 하나입니다.
나머지 비 Cool URI는 시간이 지남에 따라 변경 될 수 있으며 API 설명서는 하이퍼 미디어 순회를 통해 런타임에 발견되어야한다는 사실을 설명해야합니다.
Richardson's Maturity Model (level 3)에서 보면 링크가 작동하는 위치가됩니다. 예를 들어 최상위 레벨 인/api/version (/ 1)에서 그룹에 대한 링크가 있음을 알 수 있습니다.
루트 : 여기이 HAL Browser 같은 도구에서 볼 수있는 방법은 추가 기능은 단순히 엔드 포인트에 POST 것
{
"_links": {
"self": {
"href": "/api/root"
},
"api:group-add": {
"href": "http://apiname:port/api/group"
},
"api:group-search": {
"href": "http://apiname:port/api/group?pageNumber={pageNumber}&pageSize={pageSize}&sort={sort}"
},
"api:group-by-id": {
"href": "http://apiname:port/api/group/id" (OR "href": "http://apiname:port/api/group?id={id}")
}
}
}
, 다음은 2 개 GET 방법이있을 것이다. 여기
{
"Id" : 123,
"Name" : "test",
"_links": {
"self": {
"href": "/api/group/1" (OR "/api/group?id=1")
},
"edit": {
"href": "http://apiname:port/api/group/1"
},
"api:delete": {
"href": "http://apiname:port/api/group/1"
},
"api:items-query": {
"href": "http://apiname:port/api/bonus?groupId=1"
}
}
}
, 편집이 것 : 특정 그룹 (예를 들어 # 123)로 드릴 다운하면 다음
{
"groups": [
{
"id": 123,
"name": "Test Group"
},
{
"id": 134,
"name": "Tennis squad"
}
]
}
: 이런 식으로 뭔가를 반환 할 수
GET /api/group?pageNumber=0&pageSize=20&sort=asc
단순히 PUT이어야하고, DELETE가 필요합니다 (동일한 링크에서 REST의 레벨 2 참조). 항목의 경우, 단지 속성 일 경우 가장 잘 알고있을 것입니다. 또는 다른 최종포 인 경우 티; 그룹을 검색하는 것과 동일한 호출에서 리턴되도록이를 포함시킬 수도 있습니다.
이점은 클라이언트가 관계 (및 링크) 이름 (물론 자원 구조/속성 외에) 만 알면되지만 서버는 관계 및 리소스 URL을 자유롭게 변경할 수 있습니다 .
기본적으로 클라이언트는 여전히 서버에서 보낸 구성표와 결합해야합니다. 그 스키마는 프로토콜입니다. –
Ish. 클라이언트는 서버와 통신하기 위해 미디어 유형 (즉, 바이트 처리 방법)을 이해해야합니다 (내용 협상이 여기에서 도움이 될 수 있음). 또한 클라이언트는 응용 프로그램 상태, 즉 링크를 사용하여 목표를 달성하는 방법을 이해해야합니다. 서버는 클라이언트가 사용할 수있는 선택 사항의 표현으로 링크를 제공합니다. 클라이언트는 모든 링크를 인식 할 필요는 없지만 진행률을 제공하는 링크를 인식하지 못하면 더 이상 진행할 수 없습니다. – VoiceOfUnreason
이 경우 클라이언트가 단순히 HTTP를 통해 서비스를 호출하는 Java 응용 프로그램 인 경우 Java 응용 프로그램을 프로그래밍하여 리소스 상태의 각 단계에서 각 링크로 수행 할 작업을 이해하는 간단한 사례 일 수 있습니다. 내가 이해하지 못하는 것은 이것이 어떻게 완전히 분리 되는가하는 것입니다. 클라이언트는이 단계에서 스키마에 연결되어야합니다. 그러나 나는 HATEOS를 사용하여 서버가 클라이언트를 깨뜨리지 않고 언제든지 스키마를 변경할 수 있다고 생각했습니다. –