所以现在我明白了,我们应该全部实施我们的RESTful服务,提供使客户遵循HATEOAS原则的表示。 从理论上说,这一切都很有道理,但我一直在网上search一个严格遵循这个概念的客户代码的例子。 我读得越多,我就越觉得这是一个学术讨论,因为没有人真的这样做! 人们可以嘲笑WS- *堆栈的许多缺陷,但至less清楚如何编写客户端:您可以parsingWSDL并生成代码。 现在我明白,对于一个好的RESTful服务来说,这不是必须的:您只需要知道所涉及的关系和表示,并且您应该能够对这些服务进行dynamic反应。 但即使如此,现在这个原则不应该被提炼成一些共同的图书馆吗? 提供有关您可能会收到的表示和关系的信息,并获得一些您可以在应用程序中使用的更有用的高级代码? 这些只是我的一半的想法,但我只是谨慎,如果我现在正在潜心编写一个适当的RESTful API,没有人真的能够使用它! 或者至less使用它会在后面如此痛苦,因为额外的英里人们将不得不去写胶水代码来解释我提供的关系和表示。 任何人都可以从客户的angular度来解释这一点吗? 有人可以展示一个正确的dynamic/被动RESTful客户端代码的例子,以便我可以对我实际上正在写的观众有一个想法吗? (更好的还是一个提供一些抽象的客户端API的例子)否则,它的一切都非常理论…. [编辑:请注意,我在这里发现了一个类似的问题,我不认为这是真正的答案,作者被一个维基百科的存根所束缚!]
我正在devise一个基于JSON表示的RESTful API。 为了遵守HATEOAS,我广泛地利用资源之间的联系。 因此,我按照与ATOM链接非常相似的方式来遵循这个序列化链接的build议 。 现在我有时会遇到问题,找出正确的链接关系types。 当一个资源包含一个自己的链接时, self关系是显而易见的。 当资源是子资源的集合和聚合,或者包含许多到相关资源的链接时,它变得更加复杂。 以博客文章为例,并考虑一个返回博客文章快照的资源 – 包括本文的作者,标签和评论。 显然,这个资源包含许多子资源,当然也应该提供单独的链接: 示例资源: { "blogpost":{ "link":{ "rel":"self", "href":"http://blog/post/4711" }, "author":{ "name":"Bob", "link":{ "rel":"???", "href":"http://author/uri" } }, "title":"foobar", "content":"A long article here…", "comments":[ { "comment":"great article", "link":{ "rel":"???", "href":"http://blog/post/4711/comment/1" }, "author":{ "name":"John Doe", "link":{ "rel":"???", "href":"http://author/uri" } } } ], "tags":[ { "value":"foo", "link":{ "rel":"???", […]
比方说,我想创build一个XML-响应,将如下所示: <?xml version="1.0" encoding="utf‐8"?> <product xmlns="urn:com.acme.prods" xmlns:atom="http://www.w3.org/2005/xlink"> <id>1234</id> <name>Red Stapler</name> <price currency="EUR">3.14</price> <atom:link rel="payment" type="application/com.acme.shop+xml" href="http://acme.com/products/1234/payment" /> </product> 给定一个类似于下面的域模型: <?php // Product.php namespace Acme\Bundle\ProductBundle\Entity; use Acme\Bundle\ProductBundle\Money\Money; class Product { /** * @var integer */ private $id; /** * @var string */ private $name; /** * @var Money */ private $price; [..] } 和一个货币类别的线: <?php // […]