2015-11-08 23 views
0

想象一下,我有一個學校的API。其中一個資源是Department,其上有各種資源,例如Professors的集合和「首席教授」。REST API - 單個url的非靜態(更改)資源 - 如何設計?

部看起來是這樣的:

{ 
    "_links": { 
        "self": "http://myapi.com/department/math" 
    } 
    "name": "Math Department", 
    "headProfessor": { 
       "_links": { 
           "self": "http://myapi.com/professor/id/2", 
           "headProfessor": "http://myapi.com/headprofessor/department/math" 
       }, 
       "name": "George Patton", 
       "id": "2" 
    } 
    "professors": { 
     "_links": { 
         "self": "http://myapi.com/professors/department/math" 
     }, 
     "_collectionData": [ 
      { 
       "_links": { 
         "self": "http://myapi.com/professor/id/1" 
       }, 
       "name": "John Doe", 
       "id": "1" 
      }, 
      { 
       "_links": { 
         "self": "http://myapi.com/professor/id/2" 
       }, 
       "name": "George Patton", 
       "id": "2" 
      }, 
      { 
       "_links": { 
         "self": "http://myapi.com/professor/id/3" 
       }, 
       "name": "Paul Simon", 
       "id": "3" 
      } 
     ] 
    } 
} 

我的問題是關於 「headProfessor」 和鏈接。 「總教授」的規範鏈接是什麼?是http://myapi.com/professor/id/1還是http://myapi.com/headprofessor/department/math?我應該在那裏嗎?或者只有一個必要的?有沒有更好的方式來表示某個東西的「頭部」或「頂部」,基本上是一個URL,其資源可能因爲代表關係而不是靜態資源而發生變化?

注意

是的,我第一喜歡的資源標誌符的URL,因爲它給人的資源標誌符在每個URL相同的位置。但我的問題不在於此。這只是品味和風格的問題。

+0

GET /教授不能是相同的GET教授/ {professorId} /部門REST並沒有詳細說明它的名稱,因爲第一種方法給我所有的教授從身份證部門離開,第二種方法給我所有profId教授教授的部門。這可能是你的風格,但絕對不是RESTful URI。 –

回答

0

所有部門首先有教授,而不是反過來讓你的API的設計應該像/部門/ {DEPTID}這個

http://myapi.com/departments -> GET all departments 
http://myapi.com/departments/{departmentId}/professors ---> POST to add a professor to a department , body of POST has the rank of professor has HOD, or staff 
http://myapi.com/departments/{departmentId}/professors ---> GET should get all professors of that department 
http://myapi.com/departments/{departmentId}/professors?rank=hod ---> Should give you the HOD 
http://myapi.com/departments/{departmentId}/professors/{professorId} ---> PUT to change rank of Professor 
http://myapi.com/departments/{departmentId}/professors/{professorId} ---> DELETE to remove professor from Department if he retires or moves to another college,etc. 
+0

您的API端點的唯一區別是資源指示符的位置,即您將資源指示符放在最後(院系/教授),而我首選它,以便資源指示符始終位於同一位置(第一個)。否則,你做了和我一樣的事情。我的問題更多地是關於響應以及應該如何表示端點。 – richard

+0

這有兩個部分,首先它不是關於偏好,而是關係,而不管我們可能更喜歡教授屬於部門的多少,而不是相反。 第二部分是你問的問題已經被解決了,你不應該爲headprofessor專用資源,但應該做一個查詢參數,正如我在第3個URI中指出的那樣。請通過我列出的所有URI。如何發佈教授作爲系主任,如何獲得教授,如何編輯教授從另一位教授到現任教授,都已列入名單。 –

+0

只要API一致,這種關係可以用「教授/部門」或「部門/教授」兩種方式表示。我更喜歡資源指示符來。 – richard