HATEOAS会增加对服务器的调用次数吗?

时间:2016-12-25 16:00:40

标签: web-services rest soa hateoas hypermedia

我从来没有将HATEOAS用于RESTAPI,我理解的是HATEOAS,不需要存储URI,服务器发送响应中的URI,可以用来获取其他资源或相关资源。

但是对于HATEOAS,我们不是在增加通话次数吗? 如果我想获取客户订单信息,如果我首先获取客户信息并动态获取其订单的URI,那么这不是额外的电话吗?

可以理解松散耦合,但我不明白REST的这个成熟度级别的确切用法。

1 个答案:

答案 0 :(得分:1)

为什么HATEOAS会增加所需的请求数量?如果没有服务返回URI,客户端可以使用它来执行状态转换(收集更多信息,调用某些任务,......)客户端必须具备如何构建URI本身的一些知识(因此它与服务紧密耦合)虽然客户端仍然需要在服务器端调用端点。所以HATEOAS只是移动了如何从客户端到服务器生成URI的知识。

通常,发送到服务器的进一步请求并不是真正的问题,因为无论如何每个呼叫都应该是无状态的。如果您具有负载平衡的服务器结构,则附加请求实际上不会对服务器产生明显的性能影响。

如果您确实关心客户端向服务器发出的请求数(无论出于何种原因),您可以查看ie HAL JSON,其中您可以嵌入子资源的内容,尽管在在客户订单的情况下,这可能也会产生重大的性能影响,就像用户可能存储了大量已发布的订单一样,响应可能非常庞大,并且客户端必须管理所有数据,即使它可能不会使用它。通常,服务不会在响应中嵌入大量列表项,而是将客户端指向URI,客户端可以在该URI中了解如何在需要时检索这些信息。通常这种URI提供关于数据的可分页视图(例如客户下的订单)。

虽然可分页请求肯定会增加服务处理的数量或请求,但整体性能会提高,因为服务不必将整个订单数据返回给客户端,因此减少了备份数据库上的负载以及缩小实际响应内容的长度。

总结一下,HATEOAS旨在将创建URI的逻辑从客户端调用到服务器,从而进一步将客户端与服务分离。客户必须发出的实际请求数量不是HATEOAS,而是整体API设计和客户要求。