有没有办法防止从 API 缓存或抓取内容?

问题描述

想象一下以下情况。我有一个 API,一个开发人员构建了一个应用程序,每天从中检索新内容。她存储此内容并将此数据提供给她开发的应用程序的所有实例。通过这种方式,这些应用程序不必直接调用 API。 有没有办法防止这种情况发生并强制应用程序(以及最终用户)使用 API 而不仅仅是服务器上的应用程序。 我发现了很多关于如何缓存 API 数据的问题,但没有发现如何防止这种情况。我对此很陌生,所以也许我忽略了某些东西,或者可能无法阻止这种情况。 提前致谢!

解决方法

假设您使用 Apigee 进行 API 管理,您有一些选择。首先,考虑合同上提供给您的选项,如果这是那种业务关系,并且您可以通过合同将某些 API 行为强加给业务合作伙伴。

除了法律方面,我们还记得您控制着您的 API 以及您发布的供 API 客户端使用的凭据。实际上,您无法控制客户端开发人员如何使用您发布的凭据:她可以承诺将凭据嵌入移动应用程序的 API 客户端,但改变主意并集中使用它,然后设计她的移动客户端以调用进入她的中央缓存。如果您确实坚持只有移动应用客户端应该调用您的 API 而不是集线器/缓存服务器,那么您可以考虑在 API 上应用约束策略(在 Apigee 代理中,例如 Access Control)。例如,您可以将合作伙伴的集线器/缓存服务器 IP 地址列入黑名单,尽管这充其量只是安全性薄弱。或者,您可以应用约束,仅允许具有特定用户代理字符串(移动操作系统、客户端)的客户端连接到您的 API。或者,如果这适用于您的用例,则使用 GeoIP 过滤仅允许来自某些区域的客户端。

最后,根据数据模型,您可能能够限制速率,使批量缓存变得不切实际:如果您的边缘客户端用例是获取单个记录,但缓存必须容纳数千条记录记录,那么您可以施加每个客户端的速率限制 (Quota policy),这不会打扰单个移动客户端,但会使集线器/缓存服务器的工作无法维持。