对于我参与的一家 SaaS 初创公司,我正在构建一个 RESTful Web API 和几个使用它的不同平台上的客户端应用程序。我想我已经弄清楚了 API,但现在我正在求助于客户。正如我一直在阅读有关 REST 的内容,我发现 REST 的一个关键部分是发现,但是对于发现的真正含义的两种不同解释之间似乎存在很多争论:
开发人员发现:开发人员将大量 API 详细信息硬编码到客户端中,例如资源 URI、查询参数、支持的 HTTP 方法以及他们通过浏览文档和试验 API 响应发现的其他详细信息。恕我直言,这种类型的发现需要很酷的链接和 API 版本控制问题,并导致客户端代码与 API 的硬耦合。看起来并不比使用有据可查的 RPC 集合好多少。
运行时发现- 客户端应用程序本身能够找出它需要的一切,几乎没有或没有带外信息(大概,只有 API 处理的媒体类型的知识。)链接可能很热。但是为了使 API 非常高效,似乎需要对查询参数进行大量链接模板,这使得带外信息重新出现。可能还有其他我还没有想到的困难,因为我还没有想到发展到了那个地步。但我确实喜欢松散耦合的想法。
运行时发现似乎是 REST 的圣杯,但我看到很少有人讨论如何实现这样的客户端。我发现的几乎所有 REST 源似乎都假设开发人员发现。有人知道一些运行时发现资源吗?最佳实践?带有真实代码的示例或库?我正在为一个客户端使用 PHP(Zend 框架)。另一个是 Objective-C (iOS)。
考虑到开发人员社区目前的工具和知识,运行时发现是一个现实的目标吗?我可以编写我的客户端以不透明的方式处理所有 URI,但是如何最有效地做到这一点是一个问题,尤其是在低带宽连接上。无论如何,URI 只是等式的一部分。运行时上下文中的链接模板怎么样?除了发出很多 OPTIONS 请求之外,如何交流支持哪些方法?