RESTful工厂方法设计模式的实现

时间:2018-11-19 09:50:48

标签: rest design-patterns

您如何为使用工厂方法模式创建对象的类设计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创建护照资源,一个用于“普通”护照,一个用于“初级”护照?

1 个答案:

答案 0 :(得分:1)

  

到/ passports的POST(包括state属性),并在服务器端检查该状态是REGULAR还是PRELIMINARY,如果是非法状态,则返回BAD REQUEST响应?

这是我想要的选择。拥有一个用于添加护照资源的端点是最简单,最容易理解的。

如果使用其他选项,则每次向“状态”枚举添加/更改项目时,都还必须更改资源结构。它只会引入不必要的复杂性,并使您的API设计变得不太灵活。

您的API应该是您内部业务逻辑的抽象。如果不需要,请不要使其复杂而分层。