【发布时间】:2014-04-29 19:15:43
【问题描述】:
我可以提供一些HATEOAS 的示例/典型用例吗?我同意它可以是一个非常强大的概念,提供了很大的灵活性,但我不确定如何正确地从 HATEOAS 中受益。如果您可以分享您的经验/用例,那就太好了。
【问题讨论】:
标签: web-services rest hateoas eve
我可以提供一些HATEOAS 的示例/典型用例吗?我同意它可以是一个非常强大的概念,提供了很大的灵活性,但我不确定如何正确地从 HATEOAS 中受益。如果您可以分享您的经验/用例,那就太好了。
【问题讨论】:
标签: web-services rest hateoas eve
来自上述@dreamer 的一个很好的答案,但大多数基于 REST 的服务中不存在 HATEOAS。它是对 REST 架构风格的一种约束,它允许客户端完全通过资源中包含的超媒体与服务进行交互。
如果您查看 Twitter 或 Facebook REST API,您将找不到超媒体。查看 Facebook friendlist 资源。该资源中没有可用于转换资源状态的超文本链接 - 删除、更新等。相反,您需要阅读带外文档以了解删除该资源需要做什么资源。
声称在 API 中使用超媒体的优势之一是您可以管理资源本身的变化。例如,如果 Facebook 想要在好友列表中添加额外的功能怎么办?如果它是在考虑 HATEOAS 的情况下构建的,则将更新资源以添加超链接以提供那些额外的状态转换。
如果这听起来很困难,那你是对的。但是,作为客户端应用程序的开发人员,一旦您了解了超媒体的呈现方式,您就可以构建与 API 本身一起发展的应用程序。
那么如何使用 HATEOAS 构建 API?有很多选择,但我最喜欢Hypertext Application Language (HAL)。
更新:由于您要求提供示例,因此这里有一个使用 HAL 的 demo 的链接。
【讨论】:
很难找到好的公共 HATEOAS 用例,因为围绕 REST 存在很多误解,而且 HATEOAS 可能难以实施。你真的需要对它的好处有一个很好的了解,然后你才愿意让自己经历让它工作的麻烦,如果客户没有正确地遵循它,所有的工作都将是徒劳的。
根据我的经验,在公司中实施适当的 REST 是一种文化变革,与转向版本控制系统或敏捷开发一样重要。除非每个人都接受并理解它,否则它带来的麻烦比它解决的要多。
考虑到这一点,我认为最好的例子是 foxycart.com HAL API,在下面的链接中:
https://api-sandbox.foxycart.com/hal-browser/hal_browser.html#/
【讨论】:
这是一个非常强大的概念,用于RESTful 向客户端展示应用程序。现在有很多项目都在采用这个接口。一个典型的用例是Web Services APIs 使用 RESTful API。一个 RESTful API 通常由以下元素组成:
可以使用上面的HTTP methods 修改应用程序状态,例如,为了获取特定资源,客户端可以使用curl 发出REST query,例如:
curl -X GET --url "http://example.com/resource/" -X "Content-Type:application/json"
您可以通过man pages 了解curl 及其用法。更多关于 RESTful 接口概念可以查看wiki
【讨论】: