对于我参与的一家 SaaS 初创公司,我正在构建一个 RESTful web API 和几个使用它的不同平台上的客户端应用程序。我想我已经搞定了 API 但现在我要去找客户了。正如我一直在阅读关于 REST 的文章,我发现 REST 的一个关键部分是 发现,但是对于发现真正意味着什么,在两种不同的解释之间似乎有很多争论:
开发人员发现 : 开发人员将大量的 API 细节硬编码到客户端,比如资源 URI、查询参数、支持的 HTTP 方法,以及他们通过浏览文档和实验 API 响应发现的其他细节。这种类型的发现 IMHO 需要冷静的链接和 API 版本问题,并导致客户机代码与 API 之间的硬耦合。这并不比使用一个良好文档化的 RPC 集合好多少。
运行时发现 -客户端应用程序本身能够在很少或没有带外信息的情况下找出它需要的所有内容(大概只需要了解 API 处理的媒体类型)链接可以是热点。但是,为了使 API 非常有效,似乎需要为查询参数建立大量链接模板,这使得带外信息又回来了。可能还有其他我没有想到的困难,因为我还没有到达开发的那个点。但我确实喜欢松耦合这个主意。
运行时发现似乎是 REST 的圣杯,但是我看到关于如何实现这样一个客户机的讨论非常少。我发现的几乎所有 REST 源代码似乎都假定是开发人员发现的。有人知道一些运行时发现资源吗?最佳实践?例子还是实际代码的库?我使用 PHP (Zend Framework)为一个客户机工作。Objective-C (iOS)用于另一个。
考虑到开发者社区目前的工具和知识,运行时发现是一个现实的目标吗?我可以编写我的客户端以一种不透明的方式处理所有 URI,但是如何最有效地这样做是一个问题,特别是在低带宽连接上。无论如何,URI 只是等式的一部分。运行时上下文中的链接模板如何?除了发出大量的 OPTION 请求之外,如何交流支持哪些方法?