假设我想编写一个显示某些产品价格的应用程序。我发现了一个使用超媒体的链接,这是一种将产品名称作为输入的 HTML 表单。我将其添加为书签并继续将该链接嵌入到客户端中。
HATEOAS 客户端是否有理由再次重新发现该资源(和基础表单)而不是使用书签?
这些 URL 不应该保持不变(包括表单语义)吗?重新发现新开发的 API(并保证兼容性)是否比保持旧 API 工作更轻松?
假设我想编写一个显示某些产品价格的应用程序。我发现了一个使用超媒体的链接,这是一种将产品名称作为输入的 HTML 表单。我将其添加为书签并继续将该链接嵌入到客户端中。
HATEOAS 客户端是否有理由再次重新发现该资源(和基础表单)而不是使用书签?
这些 URL 不应该保持不变(包括表单语义)吗?重新发现新开发的 API(并保证兼容性)是否比保持旧 API 工作更轻松?
HATEOAS 不是规范,因此没有硬性规定应该做什么。
我认为客户的最佳做法是仅在这些 URL 来自的资源是新鲜的情况下使用书签。
对于服务器,最佳做法是保持旧 URL 方案正常工作,并在必要时将旧 URL 重定向到新 URL。
将书签视为缓存 URI。您不能确定您的缓存是否包含实际的 URI。您不能将该 URI 保留太久,或者您需要检查它是否不是 404。在后一种情况下,您可以尝试重新发现它。我不认为重新发现总是可能的或值得付出努力。例如,如果您通过分页找到 URI,并且它位于第 1000 页,那么除非您保存页码,否则重新发现它的成本很高,这可能会改变...我认为您需要某种书签服务来应对这些情况. 例如,您可以将传递给 URI 模板的参数和资源类型提供给该服务,或者您可以将旧的 URI 提供给该服务,它应该返回新的 URI。我不知道什么是理想的解决方案。
之后:
同时,我与 REST 专家讨论了这个问题,但我们无法就正确的解决方案达成一致。他们提出了日落标头或弃用标头,但都告诉客户端该资源将被删除。我认为这里不是这种情况,因为我们保留了资源并且只有 URI 发生了变化,所以在我们的例子中资源将被移动。我们有一个 301 移动的标题,我们可以使用重定向。我想一段时间后我们可以将其更改为 404 并添加一条错误消息,说明 URI 已更改。稍后我们可以删除路径并返回404,无需解释。