gpt4 book ai didi

java - 带有(太多)复杂对象的 Restful 架构问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:01:16 25 4
gpt4 key购买 nike

好吧,我负责这个 RESTful 架构的服务器和客户端(内部使用)部分。 (使用 reSTLet)。

我们有一个公开 Post 操作的资源。这是一个简化版本:

public class UserResource {

@Post
public Representation create(UserRegistration registration) {
SomeService.getInstance().createUser(registration);
return new XstreamRepresentation(new RegistrationResponse(registration.getUniqueCode()););
}

几个月来,我们一直是唯一使用这些服务的人,因此域对象在客户端和服务器端共享......而且它一直运行良好。

现在我们必须记录这些资源并让其他客户端使用它们,一些“问题”已经出现,让我觉得这个 API 可能有点太复杂了。

例如,此邮政服务。内部方法接受复杂类型 UserRegistration

public class UserRegistration implements Serializable {

private Profile profile;
private Boolean someBooleanProperty;

public UserRegistration(Profile profile) {
this(profile, true);
}

public Profile getProfile() {
return profile;
}

public boolean isSomeBooleanProperty() {
return someBooleanProperty;
}

}

反过来,它使用另一个复杂对象(配置文件)

public class Profile {

private String nickname;
private String email;
private String password;
private String firstname;
private String lastname;
private Date birthDate;
private String phone;
private Address address;
private GenderType gender;
private String subscriptionSite;
private Date privacyAcceptanceDate;
private Date subscriptionDate;
private String activationCode;
private String socialSecurityNumber;
...

它使用了很多复杂的类型等等。

这种复杂类型的使用真正让我感到烦恼。我要么不知道如何对此进行记录(除了列出一长串这些复杂对象的内部属性之外),要么我就迷路了。

我的问题是:我必须简化吗?这种架构设计得很糟糕吗?一些构建器方法可以解决问题吗?

最佳答案

通过在客户端和服务器之间共享域实体类型,你(不是具体说你)已经完全击败了 REST 的意义。 RESTful 系统应该只共享媒体类型和链接关系。使用 SOAP 可以像您一样共享类型,因为 WSDL 允许工具包处理保持客户端和服务器类型同步的细节。

REST 就是要减少客户端和服务器之间的耦合,以允许它们独立发展。显然,如果您有大量共享类型,那将很困难,这就是为什么您目前有这种不好的感觉。

我对这个问题采取的解决方案是定义两种媒体类型。一种是通用实体数据容器。我们称它为 BusinessDocument,另一个称为 BusinessLayout。客户端使用 BusinessDocument 从服务器检索所有数据,而 BusinessLayout 提供“数据绑定(bind)”信息,因此客户端知道在我的 UI 中的哪个位置显示不同的业务数据。

通过这样做,我能够构建一个客户端,它真的不了解它正在处理的数据的细节,它只知道如何在 UI 上显示数据以供用户与之交互。通过这样做,我能够使用单一媒体类型来描述数百个不同的业务实体。

关于java - 带有(太多)复杂对象的 Restful 架构问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6438118/

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