对于我参与的SaaS创业公司,我在不同平台上构建了一个REST风格的Web API和几个客户端应用程序。我想我已经找到了API,但现在我正在转向客户。正如我一直在阅读有关REST,我看到REST的一个关键部分是发现,但似乎有很多争论什么发现的两种不同的解释之间的真正含义是:RESTful API运行时可发现性/ HATEOAS客户端设计
开发发现:开发人员将大量的API详细信息硬编码到客户端,例如资源URI,查询参数,支持的HTTP方法以及他们通过浏览文档并试用API响应发现的其他详细信息。这种类型的发现恕我直言,需要冷静的联系和API版本问题,并导致客户端代码与API的硬耦合。看起来,如果使用一个记录良好的RPC集合,这并没有什么好处。
运行时发现 - (大概只有一个媒体类型与API交易的知识)的客户端应用程序本身能够计算出它与外的带很少或没有信息需要的一切链接可以很热。但为了使API非常高效,似乎需要大量用于查询参数的链接模板,这使得带外信息蠕动回来了。可能还有其他困难,我还没有想过,因为我没有在开发中得到了这一点。但我确实喜欢松耦合的想法。
运行时发现似乎是REST的圣杯,但我看到关于如何实现这样的客户端的小小讨论。几乎所有我发现的REST源似乎都假定开发人员发现。任何人都知道一些运行时发现资源?最佳实践?具有真实代码的示例或库?我正在为一个客户端开发PHP(Zend Framework)。 Objective-C(iOS)。
运行时发现是一个现实的目标,考虑到开发人员社区中现有的工具和知识集?我可以写我的客户端以不透明的方式处理所有的URI,但如何最有效地做到这一点是一个问题,尤其是在低带宽连接上。无论如何,URI只是等式的一部分。运行环境中的链接模板怎么样?除了提出大量的OPTIONS请求外,如何沟通支持哪些方法?
只是稍微放在您的OPTIONS参考。您可以使用“允许”标头在OPTIONS请求之外传递允许的资源操作。 Roy Fielding甚至将头文件视为一种超文本形式 - 参见[这里](http://tech.groups.yahoo.com/group/rest-discuss/message/14432)。 – paulkmoore 2012-05-19 14:37:59
tats一个gr8的问题,关键问题给出的适用方法的列表,客户应该能够形成常规CRUD操作的URL或将被称为“带外”?说,如果我们也为CRUD操作提供链接,那么你如何在json中做“形式”?可能是如果你使用应用程序特定的媒体类型,你不需要做“表单”,但是wat是发现媒体类型的标准方式(即json模式),发现模式的过程是否会被视为“out-of-乐队“为客户? – redzedi 2012-07-29 08:06:23
xhtml看起来非常好,流畅,但如果你必须做json,我想现在是非常不稳定 – redzedi 2012-07-29 08:07:47