代码之家  ›  专栏  ›  技术社区  ›  Rich Apodaca

包含hateoas约束的rest客户端实现?

  •  17
  • Rich Apodaca  · 技术社区  · 15 年前

    是否有人知道rest客户机的实现包含了 Hypermedia as the Engine of Application State (HATOOAS)?

    这个 Sun Cloud API 从记录的方式来看,似乎是个不错的候选人 a statement by the author Ruby、Java和Python实现的效果正在发挥作用。但到目前为止我还没有发现任何代码的踪迹。

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

    6 回复  |  直到 7 年前
        1
  •  11
  •   mogsie    14 年前

    首先你应该看看普通的网络浏览器。这是客户接受hateoas(至少在某种程度上)的标准。

    超媒体就是这样工作的。很简单,几乎让人痛苦:

    1. 将浏览器指向 http://pigs-are-cool.org/
    2. 浏览器加载html页面、图像、css等。
      • 此时,应用程序(您的浏览体验)位于特定的uri。
      • 浏览器正在显示该uri的内容
    3. 在应用程序中看到一个链接
    4. 你点击链接
    5. 浏览器跟随链接
      • 此时,应用程序位于不同的uri
      • 浏览器正在显示新uri的内容

    下面简要解释一下这两个术语与网络浏览体验的关系:

    • hypermedia=html页面和嵌入的链接
    • 应用程序状态=您在浏览器中任何时间点看到的内容。

    所以hateoas实际上描述了当你从一个网页转到另一个网页时,在一个网页浏览器中发生的事情:

    带有嵌入链接的HTML页面 开车 在浏览器中任何时间点看到的内容

    hateoas一词只是这种浏览体验的抽象。

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

    • rss和feed阅读器。它们遍历用户给它们的链接
    • 大多数atompub博客客户端。他们只需要一个到服务文档的uri,然后从那里他们就能找到上传图片、博客文章、搜索等等的地方。
    • 可能是谷歌的小工具(和类似的),但它们只是不同皮肤的浏览器。
    • 网络爬虫也是一个安静的客户,但他们是一个利基市场。

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

    • 客户机可以与任何服务器一起工作,前提是它使用了一些uri,并且服务器以预期的结果响应(例如,对于atom博客客户机,atom服务文档)。
    • 客户机除了在运行时可以发现的以外,对服务器如何设计其uri一无所知。
    • 客户端知道足够多的媒体类型和链接关系来理解服务器所说的内容(例如atom或rss)
    • 客户端使用嵌入的链接来查找其他资源;有些资源是自动的(比如 <img src= )有些是手动的(比如 <a href= )

    它们通常是由用户驱动的,可以正确地称为“用户代理”,googlebot说除外。

        2
  •  6
  •   Avi Flax    14 年前

    Restfulie 是一个Ruby、JAVA和C的框架,其目的是使构建使用HATOOAS的客户端和服务器。我没用过,但看起来确实很有趣。

    下面是来自 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();
    

    再说一次,我不确定这到底是怎么回事,也不知道它在实践中有多好,但它看起来确实很有趣。

        3
  •  2
  •   redben    14 年前

    rest http和hateoas的问题在于,没有通用的方法来指定链接,因此很难跟踪链接,因为它们的结构可能会从一个服务提供者更改为另一个服务提供者。有些人会用 <link href="..." /> 其他人将使用链接的专有结构例如。 <book href="..." /> . 它不像在html或atom中那样链接都是标准定义的一部分。

    客户端无法知道你的表示中的链接是什么,因为它不知道你的媒体类型,除非有一个标准或常规的链接表示

        4
  •  1
  •   Sean A.O. Harney    15 年前

    hateoas设计原则(rest也是一组设计原则)意味着每个资源最多应有一个固定url。

    所有其他相关的东西都应该可以通过“超媒体”链接从那个url动态发现。

    我刚创建了一个维基百科存根 here

        5
  •  0
  •   Jan Algermissen    14 年前

    丰富的,

    我现在正在为jersey开发一个restful客户端框架。一旦最初的设计稳定了一点,它将被添加到jersey代码库中,并且在经过社区审查之后,最终应该驱动jax-rs客户端框架的形状。

    最近在泽西岛的用户列表上有一个关于restful的热烈讨论。 https://jersey.dev.java.net/servlets/SummarizeList?listName=users

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

        6
  •  0
  •   Faisal Feroz    10 年前

    spring框架的restemplate可以用来实现这个目的。检查这个 article 详情。