JSON 표현에서의 링크 관계
JSON 표현에 기반한 RESTful API를 설계하고 있습니다.HATEOAS에 준거하기 위해서, 자원간의 링크를 폭넓게 사용하고 있습니다.따라서 ATOM 링크와 매우 유사한 방법으로 링크를 시리얼화하기 위해 이 제안을 따랐습니다.
현재 올바른 링크 관계 유형을 식별하는 데 문제가 발생할 수 있습니다.리소스에 대한 링크가 포함되어 있는 경우self
관계는 명백하다.리소스가 하위 리소스의 수집 및 집합이거나 관련 리소스에 대한 링크가 많이 포함되어 있으면 더 복잡해집니다.
블로그 투고를 예로 들면, 블로그 투고의 작성자, 태그, 코멘트를 포함한, 블로그 투고의 스냅샷을 반환하는 자원을 생각해 주세요.이 리소스에는 많은 서브 리소스가 포함되어 있으며, 물론 이러한 리소스에 대한 개별 링크도 제공해야 합니다.
{
"blogpost":{
"link":{
"rel":"self",
"href":"http://blog/post/4711"
},
"author":{
"name":"Bob",
"link":{
"rel":"???",
"href":"http://author/uri"
}
},
"title":"foobar",
"content":"A long article here…",
"comments":[
{
"comment":"great article",
"link":{
"rel":"???",
"href":"http://blog/post/4711/comment/1"
},
"author":{
"name":"John Doe",
"link":{
"rel":"???",
"href":"http://author/uri"
}
}
}
],
"tags":[
{
"value":"foo",
"link":{
"rel":"???",
"href":"http://blog/post/4711/tag/foo"
}
}
]
}
}
그러면 주어진 링크에 적합한 관계는 무엇일까요?다음과 같은 관계 유형이 있는 것으로 알고 있습니다.tag
모든 리소스가 기존 관계 유형과 일치하는 것은 아닙니다.아니면 사용해도 될까요?self
작성자/태그/댓글을 참조할 때, 그것이 동봉된 JSON(하위) 객체의 컨텍스트와 관련되어 있기 때문에?의미적 엔티티란?self
를 참조하고 있습니까?
RFC 5988은 다음과 같이 기술되어 있습니다.
링크 컨텍스트는 표시되는 위치에 따라 피드 IRI 또는 엔트리 ID 중 하나입니다.
이것을 JSON으로 어떻게 해석하면 좋을까요?각각의 새로운 오브젝트입니까?{…}
새로운 맥락?
감사합니다!
좋은 질문입니다.Hal의 예를 보면 Rel이 서브리소스의 컨텍스트 내에서 정의되어 있음을 알 수 있습니다.
rel이 자원 전체 또는 포함된 서브 리소스와 관련된 시기에 대한 명확한 가이드는 없습니다.
여기서 지적할 수 있는 유일한 추가 정보는 RFC5988의 anchor 파라미터입니다.이를 통해 fragment 또는 완전히 새로운 URI를 사용하여 컨텍스트 IRI를 재정의할 수 있습니다.
미디어 타입에는 컨텍스트 IRI가 중첩된 리소스에 대해 다른지 또는 컨텍스트 IRI를 명시적으로 변경해야 하는지 여부가 기재되어 있어야 합니다.이는 Hal 사양에 기재되어 있는 일반적인 오래된 어플리케이션/json 대신 application/vnd.hal+json과 같은 미디어 유형을 사용하는 또 다른 이점입니다.
@rel - 타겟 URI가 'Subject Resource'와 어떻게 관련되어 있는지 식별합니다.주체 리소스는 가장 가까운 상위 리소스 요소입니다.
LSON-LD
JSON-LD(JavaScript Object Notation for Linked Data)를 참조할 수 있습니다.HAL보다 복잡해 보이지만 더 많은 작업을 수행할 수 있습니다.
JSON-LD는 W3C 내에서 표준화되고 있습니다.제안 내용은 다음과 같습니다.
또한.
실례를 들어 드릴 시간이 없어서 죄송합니다.
그 질문에 답하기에는 조금 늦었지만, 나중에 참조하기 위해 이 문제를 해결하는 방법은 다음과 같습니다.
{
"blogpost":{
"title":"foobar",
"content":"A long article here…",
"link":{
"rel":"self",
"href":"http://blog/post/4711"
},
"link":{
"rel": "author",
"href": "http://author/uri",
"alt":"Bob"
},
"link":{
"rel": "comment",
"alt": "great article",
"href":"http://blog/post/4711/comment/1"
},
"link": {
"rel":"tag",
"href":"http://blog/post/4711/tag/foo",
"alt":"foo"
}
}
}
생각해보면 댓글, 태그 등은 모두 당신의 게시물에 링크된 별개의 자원입니다.그렇다면 왜 그들 모두를 현재의 모습으로 만들지 않는가?링크! 응답 크기까지 절약할 수 있습니다.
언급URL : https://stackoverflow.com/questions/6993318/link-relations-in-json-representations
'programing' 카테고리의 다른 글
Ionic 어플리케이션에서 하드웨어 되돌리기 버튼을 비활성화하시겠습니까? (0) | 2023.03.13 |
---|---|
오브젝트 JSON을 일반 인코더로 시리얼화 (0) | 2023.03.13 |
안심.request json에서 값을 추출할 수 있습니까? (0) | 2023.03.13 |
Backbone.js - id vs idAttribute vs cid (0) | 2023.03.13 |
Fetch Response 개체에서 텍스트 가져오기 (0) | 2023.03.13 |