RESTful API运行时发现/ HATEOAS客户端设计

对于我参与的SaaS创业公司,我在不同的平台上构建了一个REST风格的Web API和一些客户端应用程序。 我想我已经找到了API,但现在我正在转向客户。 正如我一直在阅读关于REST的文章,我发现REST的一个关键部分是发现,但是在两种不同的发现真正含义的解释之间似乎存在很多争论:

  • 开发者发现 :开发者将大量的API细节硬编码到客户端,比如资源URI,查询参数,支持的HTTP方法以及他们通过浏览文档和试验API响应发现的其他细节。 这种类型的发现恕我直言,需要冷静的联系和API版本问题,并导致客户端代码与API的硬耦合。 看起来,如果使用一个记录良好的RPC集合,这并没有什么好处。

  • 运行时发现 - 客户端应用程序本身能够在很少或没有带外信息的情况下找出所需的一切(大概只有API处理的媒体类型的知识)。链接可能很热。 但为了使API非常高效,似乎需要大量用于查询参数的链接模板,这使得带外信息蠕动回来了。可能还有其他困难,我还没有想过,因为我没有在开发中得到了这一点。 但我确实喜欢松耦合的想法。

  • 运行时发现似乎是REST的圣杯,但我看到关于如何实现这样一个客户端的小小讨论。 几乎所有我发现的REST源似乎都假定开发人员发现。 任何人都知道一些运行时发现资源? 最佳实践? 具有真实代码的示例或库? 我正在为一个客户端开发PHP(Zend Framework)。 Objective-C(iOS)。

    鉴于开发人员社区中现有的工具和知识,运行时发现是否是一个现实的目标? 我可以写我的客户端以不透明的方式处理所有的URI,但如何最有效地做到这一点是一个问题,尤其是在低带宽连接上。 无论如何,URI只是等式的一部分。 运行环境中的链接模板怎么样? 除了提出大量的OPTIONS请求外,如何沟通支持哪些方法?


    在此视频中,Jon Moore使用运行时HATEOAS自动发现来构建通用客户端。 它非常令人印象深刻,值得一看:

    http://oredev.org/oredev2010/2010/sessions/hypermedia-apis.html


    这绝对是一件难事。 在谷歌,我们已经实施了我们的发现服务,我们所有的新API都是针对它们而构建的。 TL; DR版本是我们生成的JSON模式样规格,我们的客户可以解析 - 其中许多是动态的。

    这样的结果意味着开发人员可以更轻松地进行SDK升级,并为我们提供简单/更好的维护。

    绝不是完美的解决方案,但我们的许多开发人员似乎都喜欢。

    有关更多详细信息,请参阅链接(并确保观看该视频)。


    迷人。 你所描述的基本上是HATEOAS原理。 你问什么是HATEOAS? 阅读:http://en.wikipedia.org/wiki/HATEOAS

    通俗地说,HATEOAS意味着链接跟随。 这种方法将您的客户从特定的URL中分离出来,并且使您可以灵活地更改您的API而不会破坏任何人。

    链接地址: http://www.djcxy.com/p/41017.html

    上一篇: RESTful API runtime discoverability / HATEOAS client design

    下一篇: RESTful api design, HATEOAS and resource discovery