HATEOAS를 사용하여 REST 서비스를 발견하기위한 전략이 있습니까?


10

HATEOAS 제한 조건 으로 REST 서비스를 빌드 할 때 링크를 통해 자원의 존재를 알리는 것이 매우 쉽습니다. 당신 GET은 내 사이트의 루트를 만들고 모든 첫 번째 계층 리소스를 나열하는 루트 문서로 응답합니다.

{
    users: { href: "/users" }
    questions { href: "/questions" }
}

이러한 href값 을 읽는 방법을 이해하는 클라이언트 GET는 해당 값에 대한 요청을 수행 하고 애플리케이션에서 사용 가능한 모든 현재 자원을 발견 할 수 있습니다.

이것은 기본 조회 시나리오에서는 잘 작동하지만 리소스를 쿼리 할 수 ​​있는지 여부는 나타내지 않습니다. 예를 들어 다음을 수행하는 것이 합리적 일 수 있습니다.

GET /users?surname=Smith

클라이언트가 리소스에 대한 사전 지식 없이도 일관된 쿼리를 구성 할 수있는 충분한 정보로이 쿼리 기능을 표현할 수있는 형식이 있습니까?

또한 고객이 POST예상 위치를 사용하여 지정된 위치 에서 수행 할 수 있음을 표현할 수있는 방법이 있습니까 ? 예를 들어, 클라이언트가 다음을 수행하여 새 질문 자원을 작성할 것으로 예상 할 수 있습니다.

POST /questions

{
    title: "Are there strategies for discovering REST services using HATEOAS?",
    body: "When building a REST service with the HATEOAS constraint, it's very..."
}

사람이 소비 할 수있는 형식으로 HTML을 사용하는 경우 양식을 작성하고 프롬프트를 작성하여 사람이 서비스에서 수행 할 수있는 작업을 발견 할 수 있도록하여이를 많이 표현할 수 있습니다.

클라이언트와 유사한 기능을 수행 할 수있는 형식이 있습니까?


2
REST-service 발견과 관련된 문제는 여기에서 논의되고 답변되었습니다. stackoverflow.com/questions/9101494/… 가장 간단한 해결책은 사용할 수있는 방법뿐만 아니라 양식 요소를 통해 전송 될 객체 구조 (입력, 선택 등) 클라이언트는 필요한 것을 찾기 위해 XML 파서 만 있으면됩니다. 다른 방법은 URL 템플릿을 사용하는 것이지만 쿼리 문자열을 취하는 리소스 만 도와줍니다.
Spoike

컨텐츠 유형에 관하여; HTTP 헤더에서 수행되는 컨텐츠 협상 으로 해결됩니다 . 서버가 요청 된 컨텐츠 유형을 제공 할 수 없으면 리턴 할 컨텐츠 유형을 나타내는 HTTP 오류 (예 : 300 또는 406)를 리턴해야합니다.
Spoike

답변:


1

어떤 종류의 입력이 허용되는지 어떻게 알 수 있습니까? 다시 말해, 고객이 사전 지식이 없다면 "성"의 의미를 어떻게 정의 할 것입니까? OWL 과 같은 것이 필요한 영역으로 들어가기 시작했습니다 .

고객이 잘 알려진 MIME 유형의 의미를 이해하도록 기대하는 것이 더 실용적이라고 생각합니다. 예를 들어 사람들을위한 "text / vcard"라고 말하십시오.


컨텐츠 유형을 사용하는 것이 좋은 방법이라고 생각합니다. 응용 프로그램을 쉽게 변경 application/atomapp+xml하여이 형식을 이미 이해하고있는 모든 클라이언트가 사용할 수있게 만들 수있었습니다. 이것을 실용적인 솔루션으로 만들기에 충분히 알려진 컨텐츠 유형이있을 수 있습니다.
Paul Turner

@Spoike의 의견은 문제의 다른 절반에 대한 우아한 REST-ian 접근법이라고 생각합니다. 클라이언트가 (예를 들어) 사용자가 vCard로 표시된다는 것을 알고 있어도 검색 할 수있는 사용자 속성의 하위 집합을 알아야합니다.
Stephen J. Anderson

4

"WADL"을 통해 서비스에 대한 세부 정보를 게시 할 수 있습니다

http://en.wikipedia.org/wiki/Web_Application_Description_Language

선택적이며 모든 백엔드 REST 테크노가이를 지원하지는 않습니다. jax-rs의 "공식"Java 구현 인 Jersey는이를 지원합니다. 자동으로 생성 할 수 있습니다.

그것이 사용되는 것을 보는 것은 매우 드 rare니다.

나는 그것을 사용하는 큰 사람들을 모른다. 일반적으로 API를 설명하는 웹 페이지가 있습니다.


1
CXF는 WADL을 지원하는 또 하나의 큰 Java JAX-RS 구현이며, 이제 몇 가지 흥미로운 타사 WADL 소비자도보기 시작했습니다.
Donal Fellows

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.