我应该如何处理JSON中的Hateoas链接和参考



我正在设计REST API的过程中,并且要保持静止。我想将Hateoas纳入JSON回复中。

将URL添加到相关资源很容易,但是有关用于这些链接的结构进行了一些讨论。

我发现很多文章都使用了从原子供稿借来的结构:

"links": [ 
    {"rel": "self", "href":"http://example.org/entity/1"},
    {"rel": "friends", "href":"http://example.org/entity/1/friends"}, ... 
]

这提出了一些问题:

  • 为什么根据我知道的JavaScript开发人员,为什么使用数组作为容器?例如:

    "self":    { "href":"http://example.org/entity/1" }, /* (facebook uses this) */  
    "friends": { "href":"http://example.org/entity/1/friends", "type": "..."}
    
  • 是否有常见的JSON结构(在再次适应原子之外)>描述资源属性中的引用?(例如,消息的发送者)。

    参考可能再次作为URL解决,但是包括简单的ID也不错吗?有点像:

    "sender": { 
        "id": 12345,
        "href": "resource-uri"
    }
    

我的思考方式是,虽然Hateoas使其成为客户不需要很多知识来使用API,但我不愿意消除使用该知识的可能性(例如,通过访问配置文件图片构建链接客户端而不先查找用户)。

我在API-Craft Google组上重新启动了此主题,并得到了一些很好的回复。

数组设计的主要优点是:

  • 相同关系的多个链接
  • 相同链接的多个关系而不编写链接again
  • 订购链接的能力

原因图具有更好的可访问性。

就结构而言,有很多可能性:

  • json-hal:http://blog.stateless.co/post/1329666666138/json-linking-with-hal或http://stateless.co/hal_specification.html
  • JSON-LD:http://json-ld.org/(可选地使用Hydra词汇)
  • JSON-SCHEMA:http://json-schema.org/(页面底部的Hyhyper Meta-Schema)
  • Collection JSON:http://amundsen.com/media-types/collection/

我想我会和HAL一起使用,因为它是最干净的解决方案,其余的都看起来很奇怪。

就结构而言,您可以尝试查看HAL(http://stateless.co/hal_specification.html)或json-ld:(http://json-ld。org/)

我认为它可以基于HTTP方法提供多个链接。

例如。

"links": [ 
    {"rel": "sender", "method":"post", "href":"http://example.org/entity/1"},
    {"rel": "sender", "method":"put", "href":"http://example.org/entity/1"}, ... 
]

也许您可以将其适应您的想法

"sender": { 
     "href":"http://example.org/entity/1",
     "methods": ["put","post"]
}

最新更新