2016-11-29 60 views
1

我正在爲測試和測試運行元數據設計一個RESTful API。我有兩個資源:TestTestRun。在數據庫中他們有一對一的關係。通過向另一個(相關)資源發送POST請求來創建/修改資源

首先,我通過發送POSTapi/v1/test創建一個Test資源。

然後我必須開始這個測試。我通過發送POSTapi/v1/test/{id}/run來創建TestRun資源,該資源與該Test資源相關。

然後,我還可以通過發送POSTapi/v1/test/{id}/finish,該修改對應TestRun資源停止測試(設置一些領域,如finish_timeresult等)。

API的用戶將永遠不會有GET訪問TestRun資源,並且只會通過其相關的Test資源訪問它們。

雖然看起來這個設計對於API用戶來說非常簡單,但我懷疑這對開發人員來說也很簡單。這個設計是否足夠好?它是否違反任何REST原則或最佳實踐?我將不勝感激這方面的任何投入。

整個API的擴展設計說明:https://gist.github.com/Ch00k/27724e29ec1bf044ebbfdabef9e842d5

+0

'我懷疑這對開發人員來說也很簡單'。可能是什麼問題呢? – 2016-11-29 10:42:30

+0

@Lutz Horn這顯然是一個錯誤的問題:)我只是想知道,如果這樣做是一個好主意,並且它不符合REST最佳實踐。 –

回答

0

您的API不會允許訪問testrun,所以testrun似乎不是一個REST資源。實際上,就測試而言,您的URL是REST的混合體,而RPC是特別是/run/finish路徑的混合體。

RPC不休息,所以我想這返工一點點:

  • 僅使用一個類型的資源,測試,在api/v1/test/{id}
  • 測試具有可以使用retrievd狀態的GET請求api/v1/test/{id}
    • statusstoppedstartedfinished,...
    • finish_time
    • result
    • ...
  • 測試狀態改變使用包含新狀態的JSON主體唱出PATCH請求api/v1/test/{id}{"status": "started"}開始測試等。這取代了RPC調用。
+0

你還會保留現有的數據庫設計嗎?即我仍然會有一個Test表和一個TestRun表,當我向api/v1/test/{id}發出PATCH請求時,會改變TestRun表中的​​記錄。 請注意,在我的設計中,測試本身沒有狀態,但它的狀態是由TestRun的start_time和end_time定義的。 –

+0

我實際上會添加一個狀態字段,因爲它使查詢更容易。 –

+1

REST與你無關堅持資源。資源可以存儲在多個表中。 – 2016-11-29 11:50:20