1.开发者发现:开发人员在客户端中硬编码大量API细节,例如资源URI、查询参数、支持的HTTP方法和其他通过浏览文档和尝试API响应而发现的细节。这种类型的发现需要很酷的链接和API版本问题,并导致客户端代码与API之间出现硬耦合。看起来并没有比使用良好记录的RPC集合更好。
2.运行时发现-客户端应用程序本身能够在很少或没有带外信息的情况下找到它所需要的一切(可能只需要知道API处理的媒体类型)。链接可以热更新。但是为了使API非常高效,似乎需要很多链接模板来处理查询参数,这会让带外信息再次渗入。可能还存在我还没有想到的其他困难,因为我还没有到开发的那个阶段。但我确实喜欢松散耦合的想法。
运行时发现似乎是REST的终极目标,但我看到很少关于如何实现这样的客户端的讨论。几乎所有我找到的REST来源都似乎假定开发人员发现。有了解运行时发现资源的人吗?最佳实践?具有真实代码的示例或库?我在PHP(Zend Framework)上为一个客户端工作。对于另一个客户端,我使用Objective-C(iOS)。
考虑到开发者社区现有的工具和知识,运行时发现是否是一个现实目标?我可以编写客户端以不透明的方式处理所有URI,但如何以最有效的方式进行处理是一个问题,特别是在低带宽连接情况下。无论如何,URI只是方程式的一部分。在运行时上下文中,链接模板怎么办?除了进行大量的OPTIONS请求之外,如何传达支持哪些方法的信息呢?