【问题标题】:HATEOAS and client implementationHATEOAS 和客户端实现
【发布时间】:2015-03-03 09:38:11
【问题描述】:
我已经阅读了几篇关于 HATEOAS 以及 API 应如何实现的文章,以便您可以通过以下链接遍历不同的状态。但是我对客户端应该如何实现感到困惑?
来自answer:
客户端不知道服务器如何设计它的 URIs
比它在运行时可以找到的。
- 如果客户端不知道直接 URI,是否需要从根节点向下爬到嵌套资源以进行 POST?
- 那么 API 文档的目的是什么?
【问题讨论】:
标签:
api
rest
architecture
hateoas
【解决方案1】:
为了实现 HATEOAS,服务器需要包含从服务器到客户端的响应链接,客户端使用这些链接来响应与服务器通信。
例如。客户端请求产品列表,服务器将响应带有添加、编辑和删除产品链接的产品列表(如果用户能够这样做),然后将在客户端中将其转换为链接或按钮,如编辑产品、删除产品。
这个blog 可能会帮助你获得更多的理解。
【解决方案2】:
如果客户端不知道直接 URI,是否需要从根节点向下爬到嵌套资源以进行 POST?
是的,除非根页面不包含描述 POST 的链接。
那么 API 文档的目的是什么?
它描述了客户端可以识别的元数据,例如通过链接或属性。所以它描述了服务的能力。
【解决方案3】:
回答您的第一个问题“如果客户端不知道直接 URI,是否需要从根节点向下爬到嵌套资源以进行 POST?”
答案是否定的。客户端总是不必从根节点爬取。可以将 URI 设计为可以从其他视图导航到直接 URI。例如,如果 URI (/Products/product1/Delete) 的目的是删除 product ,那么应该可以通过从 /Products 爬取或通过提供 Products/Deleteview 的命名空间查询来达到此目的。这个“DeleteView”URI 应该给出删除视图的所有 URI。即它可以返回一个 uri 集合,如 Products/product1/Delete、Products/product2/Delete 等。
对于您的第二个问题“那么 API 文档的目的是什么?”
API 的概念是过去的遗产。理想情况下,URI 本身应该是文档。通过这种方式,客户端可以被编程为只发现和获取它可以响应的东西。
我们掌握了管理这些命名空间的独特技术。所以我们自己免受这种视图操纵。我建议使用一种技术来操作和创建这些 URI 命名空间。