2015-11-19 104 views
0

我正在開發一個使用NodeJS的restful API。爲了讓您更多瞭解我的應用:哪些路由可以選擇REST API?

我的申請有調查。一項調查包含問題其中有選項

要添加問題,您需要在帖子正文中提供調查的ID。要添加選項,您需要提供問題的ID。

現在用於API路由。什麼會更好:

選項1

  1. /API /部門
  2. /API /調查
  3. /API /問題
  4. /API /選擇

選項2

  1. /API /部門
  2. /API /部門/ 部門標識 /調查
  3. /API /部門/ 部門標識 /調查/ survey_id /問題
  4. /API /部門/ department_id/surveys/survey_id/questions/question_id/options

最後一個看起來更符合邏輯,因爲我不需要在帖子正文中提供父代的ID。

用作端點的最佳實踐是什麼?

回答

2

我不認爲這兩者之間有一個「最佳實踐」相反,它是關於讓你的應用程序最有意義的界面。如果您通常會按部門訪問調查,那麼#2是最有意義的,並且在按照調查的基礎上訪問問題方面也很有意義。如果你想消除每個部門的一部分,你會做的東西的一種以上的混合:

  1. /API /部門
  2. /API /調查
  3. /API /調查/ survey_id /問題
  4. /API /調查/ survey_id /問題/ question_id /選項

如果你想通過每個部門去,我會改變#2,這樣,而不是/ API /部門/調查人會訪問/ API /部門/ 部門標識 /調查...

但是,如果沒有更多地瞭解應用程序,很難知道最佳答案是什麼。

1

調查是否包含除問題之外的任何內容?問題除了選擇之外還包含其他內容我想問的原因是,如果答案都沒有,那麼我更喜歡這樣的事情:

  1. /api/departments/#返回部門列表
  2. /api/departments/<survey-id>/#返回的問題清單
  3. /api/departments/<survey-id>/<question-id>/ #返回的選擇列表
  4. /api/departments/<survey-id>/<question-id>/<choice-id>#返回一個選項

或東西的效果列表。基本上,我喜歡堅持「容器」和「數據」的概念。我喜歡把它看作一個文件系統。所以如果這個概念以「s」結尾,那麼它就是一個容器(並且我希望路由以「/」結尾,以表示它像一個文件夾一樣,但是這是一個不重要的東西)。

對「/」的任何訪問都會導致該索引處的元素,這當然可以是另一個容器。與文件系統中的目錄結構類似。例如,如果我在一個文件系統打下這些了,我可能會拿出這樣的:

+ /api/departments/ 
|-----------------/human-resources/ 
        |---------------/survery-10/ 
            |----------/choice-10 
1

的選擇取決於資源是否擁有由更高級別的資源共享 ;是否要級聯刪除或不需要。如果擁有(通過級聯刪除),請選擇選項2,如果共享,則選擇選項1.

如果調查被刪除,我想您想刪除所有問題和選項(級聯刪除)。這口井與選項2相匹配,因爲如果你刪除資源/ API /部門/ DepartmentID的 /調查/ surveyid,你自然也會刪除所有子資源/ API /部門/ DepartmentID的 /調查/ surveyid /問題/ ...

另一方面,如果您希望在多個調查中共享問題並在多個部門之間共享調查,則選項1更好。

當然,如果某些資源類型是擁有的而其他資源是共享的,那麼您也可以混合使用選項1和選項2。