我可以举一些HATEOAS的示例/典型用例吗?我同意它可以是一个非常强大的概念,提供很大的灵活性,但我不确定如何正确地从 HATEOAS 中受益。如果您可以分享您的经验/用例,那就太好了。
3 回答
来自上述@dreamer 的一个很好的答案,但大多数基于 REST 的服务中不存在 HATEOAS。它是对 REST 架构风格的约束,它允许客户端完全通过资源中包含的超媒体与服务进行交互。
如果您查看 Twitter 或 Facebook REST API,您将找不到超媒体。查看 Facebook好友列表资源。该资源中没有可用于转换资源状态(删除、更新等)的超文本链接。相反,您需要阅读带外文档以了解删除该资源需要做什么资源。
在您的 API 中使用超媒体所声称的优势之一是您可以管理资源本身内的更改。例如,如果 Facebook 想要在好友列表中添加额外的功能怎么办?如果它是在考虑 HATEOAS 的情况下构建的,则将更新资源以添加超链接以提供那些额外的状态转换。
如果这听起来很困难,那你是对的。但是,作为客户端应用程序的开发人员,一旦您了解了超媒体是如何呈现的,您就可以构建将随着 API 本身发展的应用程序。
那么如何使用 HATEOAS 构建 API?有很多选择,但我最喜欢超文本应用程序语言 (HAL)。
更新:既然你问了一个例子,这里有一个使用 HAL的演示链接。
很难找到好的公共 HATEOAS 用例,因为围绕 REST 存在很多误解,而且 HATEOAS 可能难以实施。你真的需要对它的好处有一个很好的了解,在你愿意让自己经历让它工作的麻烦之前,如果客户没有正确地遵循它,所有的工作都将是徒劳的。
根据我的经验,在公司中实施适当的 REST 是一种文化变革,与转向版本控制系统或敏捷开发一样重要。除非每个人都接受并理解它,否则它带来的麻烦比它解决的要多。
考虑到这一点,我认为最好的例子是 foxycart.com HAL API,在下面的链接中:
https://api-sandbox.foxycart.com/hal-browser/hal_browser.html#/
It's very powerful concept used in RESTful
presentation of the application to the client. There are many many projects which are adopting this interface now. A typical use case for this is Web Services APIs
using RESTful APIs. A RESTful APIs typically consists of the following elements:
- base URI, such as http://example.com/resources/
- an Internet media type for the data. This is often JSON but can be any other valid Internet media type (e.g. XML, Atom, microformats, images, etc.)
- standard HTTP methods (e.g., GET, PUT, POST, or DELETE)
- hypertext links to reference state
- hypertext links to reference related resources
The application state can be modified using above HTTP methods
for example, to get a particular resource, A client can issue a REST query
using curl
like:
curl -X GET --url "http://example.com/resource/" -X "Content-Type:application/json"
you could go through the man pages
for curl
and its usage. More on RESTful interface concepts can be looked upon at wiki