子类型

时间:2017-01-20 18:16:26

标签: rest api-design

我在为管理员提供一个安静的网址结构时遇到了一些麻烦。在管理员中,我有“用户”,但用户也有子类型 - 例如:内部员工,客户经理,客户员工 - 并且每个用户都有特定的属性。对于创建新用户的方案,将它们全部放在POST /users并且包含一个属性“类型”以说明它是什么类型的用户就足够了。但是,在记录此端点时,此解决方案似乎不太正确。每个用户类型只有一个用户类型才具有不同的属性,仅举几例:

  • 内部员工:主管身份证,办公室身份证,各种内部标志
  • 客户主管:部门ID,公司ID,通知首选的各种标志
  • 客户人员:部门ID,公司ID,地址,营业时间

尽管这些用户中的每一个都有一组共同的值,例如用户名,密码,电子邮件,但是当我们进行记录时,感觉就像将它们全部创建到同一个端点会感到困惑,因为不清楚哪些字段是必需的用户类型(除非您查看代码)。我的另一个想法是为每个用户类型创建端点,如:

POST /users/internal_staff
POST /users/client_supervisors
POST /users/client_staff

我很乐意听到处理过这样的结构问题的人以及他们发现的最合理的解决方案。

1 个答案:

答案 0 :(得分:0)

POST /users的方法恰好是现实。创建三个不同的端点就像在所有三种不同的方法中重复代码一样。

正如您已明确提到的,当您拥有三个不同员工子类型的相同端点时,您需要处理文档。最好的选择是创建包含不同类型Employees记录的Enum并发布它。作为文档的一部分,您需要提及员工类型的可能值。 (例如,可以是internal_staff_member,client_supervisor或client_staff)。

如果您收到任何类型不同的请求(上述值除外),您将需要抛出一个说明'无效员工类型的异常。员工类型可以是..'。

在文档中,您需要非常明确地提及一些业务规则,说明哪种类型的员工必须使用哪些属性。 (例如,当员工类型为 - 客户员工时, - 有效负载必须包含以下属性:部门ID,公司ID,地址,营业时间等等。)

为了支持这些业务规则和验证,我们使用自定义注释(使用java和spring)。