이것은 내 머리를 감싸는 데 가장 힘든 시간을 보냈던 REST 교장 인 것 같습니다. 나머지 API를 최대한 활용해야 할 때 응용 프로그램에 대한 하이퍼 텍스트의 설계/설명에 들어가십시오.이 주체의 실제 응용 프로그램에 대한 지침은 무엇입니까? 원자 프로토콜은이 원리를 어떻게 적용합니까? 간단한 용어로 가상의 장바구니 rest API에 적용하는 방법을 설명 할 수 있습니까?누군가 "하이퍼 텍스트를 응용 프로그램 상태의 엔진으로"설명 할 수 있습니까?
답변
일반적인 웹 사이트를 탐색 해보십시오. 당신이 방문 할 때, 당신은 페이지의 내용을 읽고, 당신이 읽은 것과 당신이하고 싶은 것을 기반으로, 페이지의 다양한 링크를 따라 간다. 이것은 실제로 애플리케이션 상태의 엔진 인 "하이퍼 텍스트"의 핵심입니다. 이 예에서 응용 프로그램 상태는 머리의 상태와 현재 사용중인 페이지입니다. 이를 바탕으로 추가 링크를 가로 지르며 머리 속에있는 애플리케이션 상태를 변경합니다.
다른 하나의 요소가 있습니다. 다른 점은 URI를 추측 할 필요가 없다는 것입니다. URI를 추론 할 충분한 컨텍스트가 페이지에 있어야합니다 (예 : 응용 프로그램의 정보 내용 유형 및 URI 템플리트와 같은 항목이 있거나 URI 뒤에 오는 것이 있어야합니다. 그 외에도 RESTful HTTP 애플리케이션은 URI 구조에 신경을 쓰면 안된다.
업데이트 : HTML 폼은 확장하기 위해 HATEOAS도 사용합니다. GET을 사용하는 양식은 URI 템플리트의 사용과 유사합니다. 그리고 HATEOS는 HTTP GET을 사용하는 링크를 그냥 통과하는 것에 국한되지 않습니다. POST를 사용하는 양식 (또는 브라우저가 지원하는 경우 다른 방법)은 서버에 보낼 표현을 설명하는 것일 수 있습니다.
이 문서에서는 플리커 (Flickr)의 맥락에서 몇 가지 샘플을 제공합니다.
Flickr이 (가) RESTful이 아닙니다. 그들은 거짓말하고있어. REST의 창시자 인 Fielding 자신은 Flickr가 자신이 무엇을하고 있는지 전혀 모른다고 말합니다. – aehlke
이 개념을 살펴볼 또 다른 방법은 상태가 현재 페이지와이 페이지에 포함 된 링크로 표시된다는 것입니다. 링크를 탐색하면 다음 페이지로 표시되는 응용 프로그램의 상태가 변경됩니다. 설명하기가 조금 어렵습니다 ... 어떤 시점에서든 사용할 수있는 링크는 이미 발생한 작업을 기반으로 사용할 수있는 작업을 정의합니다. 이것은 "현재 상태"에 대한 하나의 정의입니다.
트릭은 리소스에서 "작동하는"URI를 나타내는 것입니다. URI와 연관된 표현을 검색하면 암시 적으로 조치가 수행되고 결과 표현을 검색합니다. URI는 표현에 포함되며 사용자는 특정 URI와 연관된 작업을 이해합니다. 다양한 HTTP 메소드는 발생하는 "조치"를 정의하고 조치가 허용되지 않는시기를 지정하는 데 도움을줍니다. 이것은 일반적으로 전체 RESTful 패러다임을 설명 할 때 사람들이 얻는 것입니다.
나는 이것이 아주 정확하다고 생각하지 않는다. 예를 들어 HTTP를 사용하면 GET, POST, PUT 및 DELETE 만 수행 할 수 있습니다. REST에서는 URI로 사용 가능한 동작을 나타내지 않고 URI를 통해 리소스를 노출하고 사람들이 GET, POST, PUT 및 DELETE를 수행하도록합니다. –
HTTP 동사를 올바르게 사용하는 것이 REST가 아닙니다. HTTP를 올바르게 사용하고 있습니다. – aehlke
하이퍼 미디어를 설명하려고 할 때 푯대를 기준으로 자동차에서 내비게이션의 예를 사용하는 것이 좋습니다. 나는 그것이 당신에게 질문에 직접 대답하지 않는다는 것을 알지만 도움이 될 것입니다.
자동차를 운전하고 특정 교차로에 도착하면 해당 지점에서 어디로 갈 수 있는지 표시하는 표지가 제공됩니다. 마찬가지로 하이퍼 미디어는 현재 상태를 기반으로 일련의 옵션을 제공합니다.
전통적인 RPC 기반 API는 맵과 더 비슷합니다. 지도를 사용하면 정적 도로 데이터 세트를 기반으로 경로를 계획하는 경향이 있습니다. 지도의 한 가지 문제는 트래픽이 오래되거나 트래픽이나 기타 역동적 인 요소에 대한 정보를 제공하지 않는다는 것입니다.
푯말의 장점은 건설이나 교통 흐름을 제어하기 위해 신호를 즉시 바꿀 수 있다는 것입니다.
푯말은 항상지도보다 더 좋은 옵션이라고 제안하는 것은 아닙니다. 분명히 찬반 양론이 있지만 두 가지 옵션을 모두 아는 것이 중요합니다. 그것은 하이퍼 미디어와 동일합니다. 이는 전통적인 RPC 인터페이스에 대한 유용한 대안입니다.
정확합니다. 나는 그것을 철자해야한다고 생각한다. –
하나의 작은 설명 : "현재 상태를 기반으로 한 옵션 집합"은 클라이언트가 상태를 갖지 않기 때문에 "리소스 상태를 기반으로하는 옵션 집합"이어야합니다. 유추하면 현재 위치가 리소스입니다. –
- 1. 누군가 Microsoft Unity를 설명 할 수 있습니까?
- 2. 누군가 나를 스크립트로 안내 할 수 있습니까?
- 3. 누군가 이것을 C로 이식 할 수 있습니까?
- 4. 누군가 Gtk2 포장을 설명 할 수 있습니까?
- 5. 누군가 ja_JP.UTF8을 설명 할 수 있습니까?
- 6. 누군가 UIAlertView의 차이점을 설명 할 수 있습니까?
- 7. 어디에서 응용 프로그램 데이터를로드 할 수 있습니까?
- 8. 원격 응용 프로그램 StatusBarWndClass에서 셀 텍스트를 가져올 수 있습니까?
- 9. 하이퍼 링크 내부에있는 텍스트를 클릭하여 강조 표시 할 수 있습니다.
- 10. DLL에서 교착 상태의 Python 프로그램
- 11. 하이퍼 링크에서 pdf를 인쇄 할 수 있습니까?
- 12. iPhone 응용 프로그램 내에서 Facebook에 비디오를 업로드 할 수 있습니까?
- 13. 누군가가 node.js 응용 프로그램 예제를 제공 할 수 있습니까?
- 14. 누군가 Spring web.xml 파일을 설명 할 수 있습니까?
- 15. 스위치 응용 프로그램 MenuItem 텍스트를 변경하는 방법?
- 16. Android에서 텍스트를 PDF로 변환 할 수 있습니까?
- 17. wp7에서 응용 프로그램 상태의 비트 맵 객체를 저장하는 방법은 무엇입니까?
- 18. WPF 하이퍼 링크 프로그램
- 19. 텍스트를 SVG 경로에 추가 할 수 있습니까?
- 20. TextView에 텍스트를 삽입 할 수 있습니까?
- 21. WPF 바로 텍스트를 플러시 할 수 있습니까?
- 22. EditTextCell의 텍스트를 CellTable에서 재설정 할 수 있습니까?
- 23. 응용 프로그램 막대 아이콘 아래에 텍스트를 항상 표시하려면 방법이 있습니까?
- 24. Unity의 ResolvedParameter입니다. 누군가 그것을 사용할 때 설명 할 수 있습니까?
- 25. 누군가 파이프 버퍼 교착 상태를 설명 할 수 있습니까?
- 26. 누군가 나에게 다음과 같은 하스켈 표현을 설명 할 수 있습니까?
- 27. 누군가 IMS의 좋은 학습 소스를 제안 할 수 있습니까?
- 28. 아이폰 프로그래밍의 태그를 사용하여 - 누군가 설명 할 수 있습니까?
- 29. 누군가 나에게 cron job scripts의 한계를 설명 할 수 있습니까?
- 30. 누군가 내 자바 스크립트를 보지 못하게 할 수 있습니까?
좋아, 그럼 무슨 말을하는지에 따라 템플릿 템플릿은 악의적이며 응용 프로그램은 태그와 같은 스키마를 통해 다음 옵션을 제공해야합니다. 장바구니 미디어 (예 : xml)는 다음으로 신용 카드로 결제 할 수있는 방법을 말합니다. 그 효과에 대한 예가 있습니까? 응답 해 주셔서 감사합니다. – Surya
URI 템플릿 스키마는 응용 프로그램이 사전 지식을 필요로하는 경우, 즉 클라이언트 응용 프로그램에 하드 코드 된 경우 악조건입니다. OpenSearch는 URI 템플릿을 올바르게 사용하는 좋은 예입니다. 그러나 클라이언트가 특정 방식으로 보이는 URI에 고정되어 있으면 REST가 아닙니다. –
아니요, 클라이언트가 서버에서 가져온 URI 템플릿을 사용하는 경우에는 다른 이야기입니다. 따라서 OpenSearch의 예입니다. 서버는 선험적 인 대역 외 지식에 따라 클라이언트 대신 URI를 작성하는 방법을 클라이언트에게 알려줍니다. –