2016-11-19 72 views
-1

我是REST API設計的新手。在設計API時,我對資源關係感到困惑,需要建議。REST資源中的關係

我的API有一個工作流程,每個工作流程都有一個任務。我無法決定將任務作爲獨立資源還是將其用作子資源。更確切地說:

工作流資源:

/API/V1 /工作流程

任務資源:

選項1: /API/V1 /流程/ {workflowId} /任務/ {taskId}

選項2: /api/v1/tasks/{taskId}?workflowId =「123

我通過一些堆棧溢出鏈接去了。有人說,queryString作爲一個過濾器,應該是可選的,有利於使用子資源,而其他人則喜歡將任務保持爲獨立資源,並使api url更小。

我覺得有另一種方式,我們可以讓我們的數據庫中的taskid和workflowId映射,讓用戶使用:

方案3: /API/V1 /任務/ {}任務id。

但是,這似乎是一個維護映射的巨大努力。

對此提出建議?

回答

1

REST中沒有這樣的「子資源」。一切都是自己的資源。也就是說,創建對用戶有意義的網址並且對您自己也很方便是個不錯的主意。

如果任務始終工作流的一部分,沒有什麼不妥:

/workflow/abc/task/xyz 

但這也完全沒問題:

/task/xyz 

絕對看起來不尋常的對我說:

/tasks/{taskId}?workflowId=123? 

因爲如果我不通過workflowId?通常查詢參數確實用於搜索。我不能說這是否必然是不穩定的,但它似乎是一個壞主意。

因此,前兩者之間沒有什麼區別,客觀上更好,或更寧靜。客戶不應該猜測網址,他們應該總是被發現。

我個人認爲更深的結構是因爲我認爲這樣的網址更有用,更具描述性;但這是主觀的。