gpt4 book ai didi

java - REST API 部分匹配模式 - 对象具有多对多和一对多关系

转载 作者:行者123 更新时间:2023-12-02 01:28:32 27 4
gpt4 key购买 nike

我有一个有点复杂的域对象,如下所示:

public class User implements Serializable {

private Long id;
private String firstName;
private String lastName;
private Boolean isActive;
private List<Company> comapnies;
private List<Department> departments;
private List<Responsibility> responsibilities;
private List<ContactInformation> contactInformation;
}

我希望在我的 API 中有一个端点,能够更新任何这些属性 - 我可以添加部门、职责、删除公司等。

由于网络延迟,我不想每次都进行完整的对象更新。所以我想要进行部分更新(PATCH)

现在,我有一个名为“UpdateUser”的自定义数据对象,该对象如下所示:

public class UpdateUser implements Serializable {

private User user;
private List<Company> comapnies_to_add;
private List<Company> comapnies_to_remove;
private List<Department> departments_to_add;
private List<Department> departments_to_remove;
private List<Responsibility> responsibilities_to_add;
private List<Responsibility> responsibilities_to_remove;
private List<ContactInformation> contactInformation_to_add;
private List<ContactInformation> contactInformation_to_remove;
}

然后,终点本质上会将这些操作中的每一个操作模块化(如果 Responsible_to_add.length > 0,则处理职责的添加)。

我的问题与模式更相关 - 我觉得这很“hacky”。我希望有一种方法可以仅对 User 对象使用部分更新,而不是使用带有自定义 UpdateUser 对象的自定义端点。是否有更简洁的方法来处理部分更新,包括一对多关系、多对多关系等。

我正在使用 Spring REST API 库 + Java,以防有帮助。

编辑

我认为这部分也很重要 - 我可以轻松地将删除/添加对象到用户中的每个集合的责任委托(delegate)给不同的端点(我实际上已经有了),但我想要应用程序有一个端点这样我们就可以通过事务处理一切。

最佳答案

Is there a cleaner way to handle a partial update that includes one-to-many relationships, many-to-many relationships, etc.

很难说——这取决于工作的哪一部分给你带来了麻烦。

PATCH 和类似的 PUT 表达文档编辑语义 - 在这两种情况下,我们都请求服务器使其某些资源的表示与客户端的表示相匹配.

GET/foo 然后你又给我发送了一个 1GB 的 json 文档。我将该文档加载到 json 编辑器中,并修复一两个拼写错误。因为更改很小,我可能想向您发送 PATCH 请求,而不是发回 1GB 的 json。这意味着我将在您和我理解的某种媒体类型中创建我的编辑的表示,并将该表示发送给您。

application/json-patch+json可能是一个很好的起点。

使用标准的好处是,很多工作已经为您完成。但是,如果您愿意的话,您可以设计自己的补丁文档架构,然后发布它,任何理解您的架构的客户端都可以与您进行互操作。

请注意,这一切都发生在“通过网络传输文档”领域。这里发生的任何事情都不意味着客户端知道存在对象模型、关系数据库表或任何类似的实现细节。这纯粹是服务器的问题需要解决。

当然,问题的第二部分现在是:我在这里,一台服务器,其中有一个补丁文档,并且我的关系数据库中有 110 个表可能需要更新。这是怎么发生的?正如约翰指出的那样,这是必须实现的工作。在 Java/Spring/Hibernate 世界中,一个可能的答案是,您可以通过 ORM 加载当前的服务器端状态,使用补丁来引导对本地内存数据结构的编辑,然后要求您的 ORM 找出什么需要运行语句。

关于java - REST API 部分匹配模式 - 对象具有多对多和一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56483852/

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