2017-06-12 67 views
0

在公司工資系統的範圍內,我們假設有一個PERSON資源,EMPLOYEE是它的一個特例。是可以接受的做:REST - 創建業務資源

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

這增強了現有的人使其成爲一名員工。

在這種情況下,這是可以接受的指使用人的原始ID員工:

GET /api/v1/employees/1

+0

Reffering是好的。但通常我不應該暴露 – Aashish

+0

@Aashish你怎麼會提到它而不暴露身份證? –

+0

我在rails上工作,在這裏我們通常改變/定製從「GET/api/v1/employees/1」到「/ api/v1/employees」的路線。因此,ID不會暴露 – Aashish

回答

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", 
         ... 
        } 
       } 
} 
+0

是的,人員端點仍然存在,在這種情況下,它將作爲一個人而不是員工返回與該人相關的數據。 –

+0

通常會有一個@type屬性添加到資源中以確定它是哪種類型。用一個例子更新答案。它可能有幫助。 – Lijin