REST - 创建业务资源

时间:2017-06-12 17:35:05

标签: rest

在公司薪资系统的范围内,让我们假设有一个PERSON资源,EMPLOYEE就是它的一个特例。是可以接受的:

POST /api/v1/employees 
{
personId = 1, //existing Person
salary = 19,
departmentId = 2
}

这增强了使其成为员工的现有人员。

在这种情况下,使用此人的原始ID来引用员工是否可以接受:

GET /api/v1/employees/1

1 个答案:

答案 0 :(得分:1)

我假设你有一个Person类和一个从Person扩展的Employee。如您在JSON中提到的,Employee将拥有更多字段,如薪水,部门ID等。

您是否有另一个端点可以访问人员?比如GET /api/v1/persons/1

或者所有访问都是通过GET /api/v1/employees/1

它可以使用相同的id,因为它是第一个的扩展。我猜你可能正在使用同一个表来存储这两个用户,这就是这个用例出现的原因。

使用继承资源的示例,可以使用资源中带有@type的单个端点来识别它们。

PersonResource(将此视为基类)     EmployeeResource(从EmployeeResource扩展)

对于员工资源:

{
    "someOtherElement": "value",
    "person" : {
                    "@type" : "EmployeeResource",
                    "faxNumber" : "35635636",
                    "email" : "test@gmail.com",
                    "phone" : "2503334444",
                    "contactName" : "name",
                    "firstName" : "Owner",
                    "lastName" : "lastName"
                    ...
                    "address" : {
                      "@type" : "InternationalAddressResource",
                      "province" : "AB",
                      "country" : "Canada",
                      ...
                    }
                }
}

对于IndividualResource:

{
    "someOtherElement": "value",
    "person" : {
                    "@type" : "PersonResource",
                    "email" : "test@gmail.com",
                    "firstName" : "Owner",
                    "lastName" : "lastName"
                    ...
                    "address" : {
                      "@type" : "PostalAddressResource",
                      "province" : "AB",
                      "country" : "Canada",
                      ...
                    }
                }
}