2009-04-04 1 views
7

이것은 내 머리를 감싸는 데 가장 힘든 시간을 보냈던 REST 교장 인 것 같습니다. 나머지 API를 최대한 활용해야 할 때 응용 프로그램에 대한 하이퍼 텍스트의 설계/설명에 들어가십시오.이 주체의 실제 응용 프로그램에 대한 지침은 무엇입니까? 원자 프로토콜은이 원리를 어떻게 적용합니까? 간단한 용어로 가상의 장바구니 rest API에 적용하는 방법을 설명 할 수 있습니까?누군가 "하이퍼 텍스트를 응용 프로그램 상태의 엔진으로"설명 할 수 있습니까?

답변

5

일반적인 웹 사이트를 탐색 해보십시오. 당신이 방문 할 때, 당신은 페이지의 내용을 읽고, 당신이 읽은 것과 당신이하고 싶은 것을 기반으로, 페이지의 다양한 링크를 따라 간다. 이것은 실제로 애플리케이션 상태의 엔진 인 "하이퍼 텍스트"의 핵심입니다. 이 예에서 응용 프로그램 상태는 머리의 상태와 현재 사용중인 페이지입니다. 이를 바탕으로 추가 링크를 가로 지르며 머리 속에있는 애플리케이션 상태를 변경합니다.

다른 하나의 요소가 있습니다. 다른 점은 URI를 추측 할 필요가 없다는 것입니다. URI를 추론 할 충분한 컨텍스트가 페이지에 있어야합니다 (예 : 응용 프로그램의 정보 내용 유형 및 URI 템플리트와 같은 항목이 있거나 URI 뒤에 오는 것이 있어야합니다. 그 외에도 RESTful HTTP 애플리케이션은 URI 구조에 신경을 쓰면 안된다.

업데이트 : HTML 폼은 확장하기 위해 HATEOAS도 사용합니다. GET을 사용하는 양식은 URI 템플리트의 사용과 유사합니다. 그리고 HATEOS는 HTTP GET을 사용하는 링크를 그냥 통과하는 것에 국한되지 않습니다. POST를 사용하는 양식 (또는 브라우저가 지원하는 경우 다른 방법)은 서버에 보낼 표현을 설명하는 것일 수 있습니다.

+0

URI 템플릿 스키마는 응용 프로그램이 사전 지식을 필요로하는 경우, 즉 클라이언트 응용 프로그램에 하드 코드 된 경우 악조건입니다. OpenSearch는 URI 템플릿을 올바르게 사용하는 좋은 예입니다. 그러나 클라이언트가 특정 방식으로 보이는 URI에 고정되어 있으면 REST가 아닙니다. –

+0

아니요, 클라이언트가 서버에서 가져온 URI 템플릿을 사용하는 경우에는 다른 이야기입니다. 따라서 OpenSearch의 예입니다. 서버는 선험적 인 대역 외 지식에 따라 클라이언트 대신 URI를 작성하는 방법을 클라이언트에게 알려줍니다. –

0

이 문서에서는 플리커 (Flickr)의 맥락에서 몇 가지 샘플을 제공합니다.

Hypermedia in RESTful applications

+0

Flickr이 (가) RESTful이 아닙니다. 그들은 거짓말하고있어. REST의 창시자 인 Fielding 자신은 Flickr가 자신이 무엇을하고 있는지 전혀 모른다고 말합니다. – aehlke

0

이 개념을 살펴볼 또 다른 방법은 상태가 현재 페이지와이 페이지에 포함 된 링크로 표시된다는 것입니다. 링크를 탐색하면 다음 페이지로 표시되는 응용 프로그램의 상태가 변경됩니다. 설명하기가 조금 어렵습니다 ... 어떤 시점에서든 사용할 수있는 링크는 이미 발생한 작업을 기반으로 사용할 수있는 작업을 정의합니다. 이것은 "현재 상태"에 대한 하나의 정의입니다.

트릭은 리소스에서 "작동하는"URI를 나타내는 것입니다. URI와 연관된 표현을 검색하면 암시 적으로 조치가 수행되고 결과 표현을 검색합니다. URI는 표현에 포함되며 사용자는 특정 URI와 연관된 작업을 이해합니다. 다양한 HTTP 메소드는 발생하는 "조치"를 정의하고 조치가 허용되지 않는시기를 지정하는 데 도움을줍니다. 이것은 일반적으로 전체 RESTful 패러다임을 설명 할 때 사람들이 얻는 것입니다.

+2

나는 이것이 아주 정확하다고 생각하지 않는다. 예를 들어 HTTP를 사용하면 GET, POST, PUT 및 DELETE 만 수행 할 수 있습니다. REST에서는 URI로 사용 가능한 동작을 나타내지 않고 URI를 통해 리소스를 노출하고 사람들이 GET, POST, PUT 및 DELETE를 수행하도록합니다. –

+1

HTTP 동사를 올바르게 사용하는 것이 REST가 아닙니다. HTTP를 올바르게 사용하고 있습니다. – aehlke

12

하이퍼 미디어를 설명하려고 할 때 푯대를 기준으로 자동차에서 내비게이션의 예를 사용하는 것이 좋습니다. 나는 그것이 당신에게 질문에 직접 대답하지 않는다는 것을 알지만 도움이 될 것입니다.

자동차를 운전하고 특정 교차로에 도착하면 해당 지점에서 어디로 갈 수 있는지 표시하는 표지가 제공됩니다. 마찬가지로 하이퍼 미디어는 현재 상태를 기반으로 일련의 옵션을 제공합니다.

전통적인 RPC 기반 API는 맵과 더 비슷합니다. 지도를 사용하면 정적 도로 데이터 세트를 기반으로 경로를 계획하는 경향이 있습니다. 지도의 한 가지 문제는 트래픽이 오래되거나 트래픽이나 기타 역동적 인 요소에 대한 정보를 제공하지 않는다는 것입니다.

푯말의 장점은 건설이나 교통 흐름을 제어하기 위해 신호를 즉시 바꿀 수 있다는 것입니다.

푯말은 항상지도보다 더 좋은 옵션이라고 제안하는 것은 아닙니다. 분명히 찬반 양론이 있지만 두 가지 옵션을 모두 아는 것이 중요합니다. 그것은 하이퍼 미디어와 동일합니다. 이는 전통적인 RPC 인터페이스에 대한 유용한 대안입니다.

+0

정확합니다. 나는 그것을 철자해야한다고 생각한다. –

+0

하나의 작은 설명 : "현재 상태를 기반으로 한 옵션 집합"은 클라이언트가 상태를 갖지 않기 때문에 "리소스 상태를 기반으로하는 옵션 집합"이어야합니다. 유추하면 현재 위치가 리소스입니다. –

관련 문제