RESTful 참조 표현-시맨틱 링크 vs URI


9

고객의 계정 정보를 열기 위해 RESTful API를 설계하고 있습니다. 현재 리소스와 관련된 다른 리소스에 대한 참조가 포함 된 표현이 있습니다. 이것은 공개 된 자료뿐만 아니라 공개 API에서도 찾을 수있는 여러 가지 모범 사례에서 나온 것입니다. 표현은 XML 또는 JSON 일 수 있습니다.

예를 들어 계정 리소스에 대해서는 계정 주소에 대한 참조가 있고 페이지 매김 목록 리소스에 대해서는 첫 번째, 다음 및 이전 페이지에 대한 참조가 있습니다.

API는 <link title="" rel="" href="" />O'Reilly 책에 설명 된대로 시맨틱 링크 를 사용하여 처음 설계 되었으며 Netflix 및 Google의 API에서 사용되었습니다. QA 엔지니어가 자동화 제품군을 작성해야 할 시점이되었을 때 링크를 직렬화 해제하는 데 문제가있었습니다. 우리는 이제 페이스 북과 트위터가 API에서 사용하는 더 간단한 URI 문자열 요소를 제안했습니다.

Google의 QA 엔지니어는 deserialization 문제를 해결했지만 시맨틱 링크와 함께 현재 API 사양을 쉽게 사용할 수 있다는 우려가 있습니다. API는 주로 고객과 일부 타사 파트너가 소비하며 이전 XML-RPC API가 소비자에게 너무 어려워 REST로 전환했습니다.

tl; dr;

질문:

시맨틱 링크 표현을 구현 한 사람이 소비자 문제에 어려움을 겪었습니까?


업데이트 (6/21) : 시맨틱 링크를 유지하기로 결정하고 혼란이 최후의 사례가되기를 바랍니다. API가 일부 소비자에게 공개되면 경험에 대한 질문에 대답하는 것을 기억할 것입니다.


편집 : 예제 추가

시맨틱 계정 JSON :

{
    "username": "paul",
    "links": [
        {
            "title": "addresses",
            "rel": "related",
            "href": "http://example.com/account/paul/addresses"
        },
        {
            "title": "history",
            "rel": "related",
            "href": "http://example.com/account/paul/history"
        }
    ]
}

시맨틱 계정 XML :

<account>
    <username>paul</username>
    <link title="addresses" rel="related" href="http://example.com/account/paul/addresses" />
    <link title="history" rel="related" href="http://example.com/account/paul/history" />
</account>

간단한 계정 JSON :

{
    "username": "paul",
    "addresses": "http://example.com/account/paul/addresses"
    "history": "http://example.com/account/paul/history"
}

간단한 계정 XML :

<account>
    <username>paul</username>
    <addresses>http://example.com/account/paul/addresses</addresses>
    <history>http://example.com/account/paul/history</history>
</account>

원래 의미 론적 링크와 "단순한 uri 문자열 요소"의 구체적인 예를 알려 주시겠습니까? 이러한 용어, 특히 후자의 용어가 무엇을 의미하는지는 분명하지 않습니다.
Tom Anderson

구체적인 예제로 업데이트되었습니다. 도움이된다면 페이지 매김 목록 / 컬렉션에 대한 예제를 추가 할 수도 있습니다.
Paul

답변:


3

나는 오히려 가질 것이다 :

{
  "username": "paul",
  "address": {
      "rel": "related",
      "href": "http://example.com/account/paul/addresses"
  },
  "history" {
      "rel": "related",
      "href": "http://example.com/account/paul/history"
  }
}

이것은 배열을 제거하고 객체를 순회 할 수있게합니다 (예 : JavaScript에서 계정 주소를 얻으려면 모든 링크를 반복하고 주소처럼 보이는 대신 account.address.href라고 말할 수 있음). 해당 XML :

<account>
    <username>paul</username>
    <addresses>
        <link rel="related" href="http://example.com/account/paul/addresses" />
    </addresses>
    <history>
        <link rel="related" href="http://example.com/account/paul/history" />
    </history>
</account>

어떻게 생각해?


1

시맨틱 웹의 꿈은 링크가 자동으로 발견 될 수 있다는 것입니다. 어려운 부분은 연결과 그 사용법을 이해하는 것이므로 의미 정보가 그렇게 유용하지 않다고 생각합니다.

"rel"속성에 공백으로 구분 된 필드의 정의 된 확장 성 메커니즘이 있고 "link"가 잘 이해되어 있기 때문에 시맨틱 XML 양식에 약간 기대어 있습니다.

그러한 API의 소비자로서 나는 다른 차이점을 보지 못했습니다.

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