包含HATEOAS约束的REST客户端实现?

包含HATEOAS约束的REST客户端实现?,rest,hateoas,Rest,Hateoas,有人知道一个包含(HATEOAS)约束的REST客户机的实现吗 从它的文档记录方式以及Ruby、Java和Python实现的效果来看,它似乎是一个很好的候选者。但到目前为止我还没有找到代码的踪迹 我在寻找任何东西-即使是部分实现也会有帮助。HATEOAS设计原则(REST也是一组设计原则)意味着每个资源最多应该有一个固定URL 通过“超媒体”链接,可以从该URL动态发现其他相关内容 我刚刚创建了一个wikipedia存根是一个Ruby、Java和C#框架,旨在构建使用HATEOAS的客户端和服务

有人知道一个包含(HATEOAS)约束的REST客户机的实现吗

从它的文档记录方式以及Ruby、Java和Python实现的效果来看,它似乎是一个很好的候选者。但到目前为止我还没有找到代码的踪迹


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

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

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

我刚刚创建了一个wikipedia存根是一个Ruby、Java和C#框架,旨在构建使用HATEOAS的客户端和服务器。我没用过,但看起来确实很有趣

下面是以下示例代码:


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

REST HTTP和HATEOAS的问题是,没有通用的方法来指定链接,因此很难跟踪链接,因为它们的结构可能会从一个服务提供商更改到另一个服务提供商。一些人会使用
其他人会使用专有的链接结构,例如
。它不像HTML或atom中定义的链接是标准的一部分


客户端无法知道您的表示中的链接是什么,除非有标准或常规的链接表示,否则它无法知道您的媒体类型。您首先应该查看的是通用web浏览器。这是接受HATEOAS(至少在某种程度上)的客户的标准

这就是超媒体的工作原理。这是如此简单,几乎让人痛苦:

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

    • 超媒体=带有嵌入链接的HTML页面
    • 应用程序状态=您在任何时间点在浏览器中看到的内容
    因此,HATEOAS实际上描述了当您从一个网页转到另一个网页时,在web浏览器中发生的情况:

    带有嵌入链接的HTML页面可以驱动您在任何时间点在浏览器中看到的内容

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

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

    • RSS和提要阅读器。它们遍历用户提供给它们的链接
    • 大多数AtomPub博客客户端。他们只需要一个服务文档的URI,就可以从那里找到上传图片、博客文章、搜索等的位置
    • 可能是谷歌的小玩意(和类似的),但它们仅仅是不同外观的浏览器
    • 网络爬虫也是RESTful客户,但它们是一个利基市场
    RESTful客户端软件的一些特征:

    • 客户机与任何服务器一起工作,因为它使用一些URI进行了初始化,并且服务器以预期结果进行响应(例如,对于atom博客客户机,atom服务文档)
    • 客户机除了在运行时可以找到什么以外,对服务器如何设计其URI一无所知
    • 客户机知道足够的媒体类型和链接关系来理解服务器在说什么(例如Atom或RSS)

    • 客户端使用嵌入式链接查找其他资源;有些是自动的(如
      ),有些是手动的(比如
      好问题。我还没有发现编写REST式客户端的框架:即那些能够按照HATEOAS原则动态反应的框架。这是一个遗憾,因为这种想法是REST的宗旨,但是缺乏正式的支持以及对REST的误解使社区看起来支离破碎。@Dawiderenchy由于与此处相同的原因,此处不属于主题。请避免推荐您不熟悉的网站。推荐阅读:我认为这个答案和您的Wikipedia存根是不正确的。我不明白REST应用程序必须通过单个简单URL访问的方式或原因。任何给定的URL都应该是可书签的(很酷的URI不会更改)我不知道“最多一个固定URL”有道理。这意味着有些资源没有URL?显然没有。我也不明白为什么一个资源不能有多个URI。HATEOAS意味着状态转换是通过超媒体链接完成的。这包括从某个深度书签备份到某个父资源。HATEOS原则实际上是一个re URI不是固定的,这就是重点。将客户端url假设与服务器的实际实现分离。这一切都很好,但web浏览器只是呈现超媒体,这是一个人做的所有理解和决定链接的含义和单击的内容。那么设计为由软件驱动的客户端实现呢?这绝对是最大的区别。由软件驱动的客户端实现需要编程以理解它在“冒险”中发现的链接(和形式?)。我想主要的一点是,将客户端编码为媒体类型,而不是特定服务器的URI结构。有趣的是,您所有的“其他示例”都是检索数据并将其呈现给用户阅读的客户端。HATEOS在服务器上以逻辑格式公开内容非常有效,但在客户端,我看不出它有什么作用在RPC上,我就这样结束了
      
      Order order = new Order();
      
      // place the order
      order = service("http://www.caelum.com.br/order").post(order);
      
      // cancels it
      resource(order).getTransition("cancel").execute();