在公司工資系統的範圍內,我們假設有一個PERSON資源,EMPLOYEE是它的一個特例。是可以接受的做:REST - 創建業務資源
POST /api/v1/employees
{
personId = 1, //existing Person
salary = 19,
departmentId = 2
}
這增強了現有的人使其成爲一名員工。
在這種情況下,這是可以接受的指使用人的原始ID員工:
GET /api/v1/employees/1
?
在公司工資系統的範圍內,我們假設有一個PERSON資源,EMPLOYEE是它的一個特例。是可以接受的做:REST - 創建業務資源
POST /api/v1/employees
{
personId = 1, //existing Person
salary = 19,
departmentId = 2
}
這增強了現有的人使其成爲一名員工。
在這種情況下,這是可以接受的指使用人的原始ID員工:
GET /api/v1/employees/1
?
我假設你有一個Person類和一個從Person延伸出來的Employee。正如您在JSON中提到的,員工將擁有更多字段,如薪水,部門ID等。
您是否有另一個終端訪問人員?像GET /api/v1/persons/1
?
或者所有的訪問都是通過GET /api/v1/employees/1
?
它可以使用相同的ID,只要它是第一個擴展名。我想你可能會使用同一個表來存儲兩者,那就是這個用例出現的原因。
一個使用繼承資源的例子,可以在資源中使用帶@type的單個端點來標識它們。
PersonResource(考慮到這一點爲基類) EmployeeResource(從EmployeeResource擴展)
對於員工資源:
{
"someOtherElement": "value",
"person" : {
"@type" : "EmployeeResource",
"faxNumber" : "35635636",
"email" : "[email protected]",
"phone" : "2503334444",
"contactName" : "name",
"firstName" : "Owner",
"lastName" : "lastName"
...
"address" : {
"@type" : "InternationalAddressResource",
"province" : "AB",
"country" : "Canada",
...
}
}
}
對於IndividualResource:
{
"someOtherElement": "value",
"person" : {
"@type" : "PersonResource",
"email" : "[email protected]",
"firstName" : "Owner",
"lastName" : "lastName"
...
"address" : {
"@type" : "PostalAddressResource",
"province" : "AB",
"country" : "Canada",
...
}
}
}
是的,人員端點仍然存在,在這種情況下,它將作爲一個人而不是員工返回與該人相關的數據。 –
通常會有一個@type屬性添加到資源中以確定它是哪種類型。用一個例子更新答案。它可能有幫助。 – Lijin
Reffering是好的。但通常我不應該暴露 – Aashish
@Aashish你怎麼會提到它而不暴露身份證? –
我在rails上工作,在這裏我們通常改變/定製從「GET/api/v1/employees/1」到「/ api/v1/employees」的路線。因此,ID不會暴露 – Aashish