17

我可以举一些HATEOAS的示例/典型用例吗?我同意它可以是一个非常强大的概念,提供很大的灵活性,但我不确定如何正确地从 HATEOAS 中受益。如果您可以分享您的经验/用例,那就太好了。

4

3 回答 3

8

来自上述@dreamer 的一个很好的答案,但大多数基于 REST 的服务中不存在 HATEOAS。它是对 REST 架构风格的约束,它允许客户端完全通过资源中包含的超媒体与服务进行交互。

如果您查看 Twitter 或 Facebook REST API,您将找不到超媒体。查看 Facebook好友列表资源。该资源中没有可用于转换资源状态(删除、更新等)的超文本链接。相反,您需要阅读带外文档以了解删除该资源需要做什么资源。

在您的 API 中使用超媒体所声称的优势之一是您可以管理资源本身内的更改。例如,如果 Facebook 想要在好友列表中添加额外的功能怎么办?如果它是在考虑 HATEOAS 的情况下构建的,则将更新资源以添加超链接以提供那些额外的状态转换。

如果这听起来很困难,那你是对的。但是,作为客户端应用程序的开发人员,一旦您了解了超媒体是如何呈现的,您就可以构建将随着 API 本身发展的应用程序。

那么如何使用 HATEOAS 构建 API?有很多选择,但我最喜欢超文本应用程序语言 (HAL)

更新:既然你问了一个例子,这里有一个使用 HAL的演示链接。

于 2014-03-22T13:47:49.047 回答
6

很难找到好的公共 HATEOAS 用例,因为围绕 REST 存在很多误解,而且 HATEOAS 可能难以实施。你真的需要对它的好处有一个很好的了解,在你愿意让自己经历让它工作的麻烦之前,如果客户没有正确地遵循它,所有的工作都将是徒劳的。

根据我的经验,在公司中实施适当的 REST 是一种文化变革,与转向版本控制系统或敏捷开发一样重要。除非每个人都接受并理解它,否则它带来的麻烦比它解决的要多。

考虑到这一点,我认为最好的例子是 foxycart.com HAL API,在下面的链接中:

https://api-sandbox.foxycart.com/hal-browser/hal_browser.html#/

于 2014-03-22T20:44:11.630 回答
-1

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

于 2014-03-22T09:24:54.173 回答