您如何为使用工厂方法模式创建对象的类设计RESTful API?
假设您有护照课程:
public class Passport {
final String firstName;
final String lastName;
final Date birthDate;
State state;
private Passport(State state, String firstName, String lastName, Date birthDate) {
this.state = state;
this.firstName = firstName;
this.lastName = lastName;
this.birthDate = birthDate;
}
public static Passport createPreliminary(String firstName, String lastName, Date birthDate) {
return new Passport(PRELIMINARY, firstName, lastName, birthDate);
}
public static Passport createRegular(String firstName, String lastName, Date birthDate) {
return new Passport(REGULAR, firstName, lastName, birthDate);
}
public void invalidate() {
state = INVALID;
}
}
public enum State {
PRELIMINARY,
REGULAR,
EXPIRED,
INVALID
}
可以在两种不同的状态下创建Passport实例。创建后,只能通过诸如invalidate()之类的状态转换方法以受限方式更改state属性。
创建Passport资源的RESTful方法是什么?到/ passports的POST(包括state属性),并在服务器端检查该状态是REGULAR还是PRELIMINARY,如果是非法状态,则返回BAD REQUEST响应?还是使用两个不同的URL创建护照资源,一个用于“普通”护照,一个用于“初级”护照?
答案 0 :(得分:1)
到/ passports的POST(包括state属性),并在服务器端检查该状态是REGULAR还是PRELIMINARY,如果是非法状态,则返回BAD REQUEST响应?
这是我想要的选择。拥有一个用于添加护照资源的端点是最简单,最容易理解的。
如果使用其他选项,则每次向“状态”枚举添加/更改项目时,都还必须更改资源结构。它只会引入不必要的复杂性,并使您的API设计变得不太灵活。
您的API应该是您内部业务逻辑的抽象。如果不需要,请不要使其复杂而分层。