REST客户端实现是否拥抱HATEOAS约束?

时间:2009-07-24 22:39:08

标签: rest hateoas

是否有人知道包含Hypermedia as the Engine of Application State(HATEOAS)约束的REST客户端的实现?

Sun Cloud API似乎是一个很好的候选者,从它的记录方式和a statement by the author判断Ruby,Java和Python实现的效果。但到目前为止,我还没有找到任何代码的痕迹。

我正在寻找任何东西 - 即使部分实施也会有所帮助。

6 个答案:

答案 0 :(得分:11)

您应该首先看到的是常见的Web浏览器。它是包含HATEOAS的客户的标准(至少在某种程度上)。

这就是超媒体的运作方式。这很简单,几乎是痛苦的:

  1. 您将浏览器指向http://pigs-are-cool.org/
  2. 浏览器加载HTML页面,图像,CSS等。
    • 此时,应用程序(您的浏览体验)位于特定的URI。
    • 浏览器显示该URI的内容
  3. 您在应用程序中看到了一个链接
  4. 点击链接
  5. 浏览器跟随链接
    • 此时,应用程序位于不同的URI
    • 浏览器显示新URI的内容
  6. 现在简要说明这两个术语与网络浏览体验的关系:

    • 超媒体=带有嵌入链接的HTML页面
    • 应用程序状态=您在任何时间点在浏览器中看到的内容。

    所以HATEOAS实际上描述了当你从网页转到网页时在网络浏览器中发生的事情:

      

    带有嵌入式链接的HTML页面驱动器您在浏览器中随时查看的内容

    术语HATEOAS只是这种浏览体验的抽象。

    RESTful客户端应用程序的其他示例包括:

    • RSS和Feed阅读器。它们遍历用户提供给他们的链接
    • 大多数AtomPub博客客户端。他们只需要一个服务文档的URI,然后从那里找到上传图像和博客文章的位置,搜索等等。
    • 可能是谷歌小工具(和类似的),但它们只是不同皮肤的浏览器。
    • 网络抓取工具也是RESTful客户端,但它们是一个利基市场。

    RESTful客户端软件的一些特性:

    • 客户端可以与任何服务器一起使用,因为它使用了一些URI并且服务器响应了预期的结果(例如,对于原子博客客户端,Atom服务文档)。
    • 客户端对服务器如何设计其URI以及在运行时发现的内容一无所知
    • 客户端知道足够的媒体类型和链接关系,以了解服务器所说的内容(例如Atom或RSS)
    • 客户端使用嵌入式链接查找其他资源;一些自动(如<img src=)手动(如<a href=)。

    通常它们由用户驱动,并且可以正确地称为“用户代理”,但GoogleBot除外。

答案 1 :(得分:6)

Restfulie是一个Ruby,Java和C#框架,旨在支持构建使用HATEOAS的客户端和服务器。我没有使用它,但看起来确实很有趣。

以下是their java project的一些示例代码:

Order order = new Order();

// place the order
order = service("http://www.caelum.com.br/order").post(order);

// cancels it
resource(order).getTransition("cancel").execute();

同样,我不确定它到底是做什么的,或者它在实践中的效果如何,但它看起来确实很有趣。

答案 2 :(得分:2)

REST HTTP和HATEOAS的问题在于没有通用的方法来指定链接,因此很难跟踪链接,因为它们的结构可能会从服务提供者变为另一个。有些人会使用<link href="..." />其他人会使用专有结构的链接ex。 <book href="..." />。它不像HTML或原子链接是标准定义的一部分。

客户无法知道您的代表中的链接是什么,除非有标准或传统的链接表示,否则它不知道您的媒体类型

答案 3 :(得分:1)

HATEOAS设计原则(REST也是一组设计原则)意味着每个资源最多只能有一个固定的URL。

其他相关内容应该可以通过“超媒体”链接从该URL动态发现。

我刚开始使用wikipedia存根here

答案 4 :(得分:0)

富,

我现在正在为Jersey的RESTful客户端框架工作。一旦初始设计稳定了一点,它将被添加到Jersey代码库中,并在通过社区进行审查后最终应该推动JAX-RS的客户端框架的形状。

最近对Jersey用户名单进行了热烈的讨论,讨论了RESTful的所有内容。 https://jersey.dev.java.net/servlets/SummarizeList?listName=users

从现在起大约两周后,代码首次公开让人们进行实验。

答案 5 :(得分:0)

Spring Framework的RestTemplate可用于实现此目的。有关详细信息,请查看此article