gpt4 book ai didi

java - 使用 Spring 客户端浏览 HATEOAS

转载 作者:行者123 更新时间:2023-12-02 04:43:50 27 4
gpt4 key购买 nike

我们有一个 API,它使用 Spring JPA 并通过 REST 提供对我们数据库中某些数据的访问。该 API 以 Hateoas 方式公开(我们使用的是 Spring 实现)。

我们现在正在考虑是坚持这种方法还是手动编写 s=我们自己的 REST 接口(interface)。现在,我已经阅读了很多关于 HATEOAS 的文章,但我不确定使用它的最大优势是什么。当然,我知道我可以使用链接浏览它,但我仍然需要知道每个级别的链接是否存在,对吧?

为了说明我的问题,假设我有以下结构:

server.com/
- /store
- /users/

server.com/users
- /managers/
- /other/

server.com/managers
- list of entities with ids

我想使用这个 API 并获取所有“经理”实体(位于 server.com/users/managers 下)

使用 Spring 引导链接时这样做的正确方法是什么?

选项一:
  RequestEntity<Void> request = RequestEntity.get("server.com/users/managers").accept(HAL_JSON).build();
final Resource<Manager> managers = restTemplate.exchange(request, new ResourcesType<Manager>() {
}).getBody();

选项二:
   // global endpoint
RequestEntity<Void> request = RequestEntity.get("server.com").accept(HAL_JSON).build();
final Resource<Object> rootLinks = restTemplate.exchange(request, new ResourceType<Object>() {
}).getBody();

Links links = new Links(rootLinks.getLinks());
final Link userLink = links.getLink("users").expand();

// users endpoint
request = RequestEntity.get(URI.create(userLink.getHref())).accept(HAL_JSON).build();
final Resource<Object> managerLinks = restTemplate.exchange(request, new ResourceType<Object>() {
}).getBody();

links = new Links(managerLinks.getLinks());
final Link managerLink = links.getLink("managers").expand();

// managers endpoint
request = RequestEntity.get(URI.create(managerLink.getHref())).accept(HAL_JSON).build();
final Resources<Manager> resourceAccounts = restTemplate.exchange(request, new ResourcesType<Manager>() {
}).getBody();

第一个选项似乎很简单,我可以通过单个请求获取所有实体。但是,如果我只使用这种方法,我看不到热 Hateoas 是有益的。 Spring 文档指出,不建议使用硬编码链接。

第二种方法似乎更符合 Hateoas 的风格,但它创建了三个请求,只是为了获取我已经知道的位置的资源。这似乎也不对。

我知道这可能是一个愚蠢的问题,但有人可以解释一下我显然缺少的 Hateoas 背后的好主意是什么?

最佳答案

使用 HATEOAS 服务器可以引导客户端通过提供的链接。服务器和客户端之间的契约是链接的关系类型和媒体类型。如果资源处于启用或禁用编辑的状态,或者如果用户被授权对资源进行某些操作等,服务器可以通过提供或不提供相同资源表示上的链接来向客户端提供信息。服务器可以在不违反契约(Contract)的情况下更改 URL。

关于java - 使用 Spring 客户端浏览 HATEOAS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35080238/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com