HATEOAS 简而言之:在您输出的数据中,使用 URI 而不是 ID 来引用其他资源。
正如所有简短的定义一样,我刚才给出的定义在很多层面上都是错误的,但它应该让你明白 HATEOAS 的症结是什么。
现在,再解释一下。
HATEOAS 原则说应用程序的状态应该通过超文本链接进行。想想你在互联网上浏览。首先,您必须在地址栏中输入地址。从那时起,您的导航几乎只能通过点击链接取得进展:您点击一个链接,您最终会进入另一个页面。再点击一次,这里就会出现另一个页面。浏览器如何将您从第一页移动到第二页到第三页?它使用了在<a> 元素中编码的 URL。
同样,如果您的 REST 应用程序生成此结果
<accomodation>
<hotel info="http://example/hotel/0928374" price="200"/>
<guest-house info="http://example/guest-h/7082" price="87"/>
</accomodation>
那么接收应用程序将无需访问任何外部知识源即可知道第一家酒店在http://example/hotel/0928374 和第二家在http://example/guest-h/7082 可用。
另一方面,如果您的应用程序生成具有类似 ID 的响应
<accomodation>
<hotel id="0928374" price="200"/>
<guest-house id="7082" price="87"/>
</accomodation>
接收应用程序必须提前知道 ID 必须如何与前缀组合以获取每个住宿信息可用的 URI(例如 "在每个请求中添加 http://example/,然后添加 @ 987654327@ 用于酒店,guest-h 用于宾馆")。您可以看到,这种机制与许多 DB 应用程序中发生的机制相似,但与浏览器的工作方式不同。
遵循 HATEOAS 原则很重要,因为它允许应用程序在不大幅更改接收应用程序的情况下增长。假设您要将 URI 从 http://example.com/hotel/0928374 更改为 https://reviews.example.com/accommodation/0928374。如果你遵循 HATEOAS 将是一个简单的更改:修改返回值并且它是:接收应用程序将继续工作而无需任何修改。相反,如果您有关于如何构建 URI 的单独文档,则必须联系所有应用程序开发人员并要求他们注意文档已更新,他们应该更改代码以反映更改。
免责声明:这是一个快速回答,只是触及了问题的表面。但如果你明白了这一点,你就掌握了 HATEOAS 原则的 80%。