2017-07-25 66 views
4

我正在为另一个团队构建的API创建一个Angular 4前端。 API遵循HATEOAS,并为每个响应提供超媒体链接。如何在Angular中使用HATEOAS REST API?

我知道API的形状,我想我只需将大量网址硬编码到Angular Services中即可。但是,一位同事(谁是后端开发人员)正试图说服我,我应该充分利用超媒体,因为这意味着前端和后端之间的耦合减少(并且如果API改变,则可能会破坏)。

但是,我非常难以理解如何使用Angular的内置Http服务实现简单的HATEOAS模式。我如何以不将所有服务连接在一起并使其难以测试的方式来存储/共享超媒体/ URL信息?那里似乎没有例子。

试图创建一个HATEOAS友好的HTTP客户端,甚至是一个好主意,或者它可能不值得麻烦?

+1

您可以通过使用'rel'属性找到响应中的url,并将该URL存储到实体本身。例如,当您收到产品清单时,会从响应中获取每个产品详细信息页面的链接并存储在角度模型中。 –

+0

谢谢。这只是我,还是这看起来违反了单一责任原则?为什么应该在API的细节/编辑/更新URL中嵌入产品信息? –

+0

我不这么认为。这只是元信息,与产品实体高度一致。如果你硬编码/构造URL,那么你正在创建一个不必要的依赖关系并添加额外的责任。 –

回答

1

你的同事是对的,你应该使用后端提供的元信息。通过这种方式,您不会对不属于此处的客户承担责任。为什么客户应该知道从哪里获取实体?存储实体(实际上是一般数据)是后端的责任。后端拥有数据,决定将数据放在哪里,如何访问数据,何时更改位置或持久性类型,以及与存储数据相关的任何内容。

我该如何以不将所有服务连接在一起并使其难以测试的方式来存储/共享超媒体/ URL信息?

为什么你认为使用HATEOAS会使测试更难?事实上,没有使用它,这使得测试变得更加困难,因为URL是静态的,这使得后端不可用。

您可以从后端响应中提取信息,并将其作为元信息存储在角度模型中,_meta密钥或类似信息中。