儘管不完全是RESTful,但我認爲使用操作更有意義,因爲您在做的事情在概念上涉及更多,而不僅僅是操作簡單數據。因此,我已經採用了以下方案:Web API操作
/api/projects/ = Returns all projects
/api/projects/{id} = Returns single project
/api/projects/{id}/{action} [POST]
Applies action on a project, such as "Activate"
/api/projects/{action} [GET]
Gets projects which meet the condition of the action, such
as all projects which are "Active"
但是......提供了一種方式來獲得項目的客戶不是那麼清楚,我傾向於選擇2 ...
1. /api/projects/GetByClient [POST, Client Id in body]
But now it has to be a POST, when we're only getting a resultset...
2. /api/clients/{clientid}/GetProjects
But now we're returning projects from a clients controller
3. /api/ProjectGetterForClient/{client}
But will result in a large number of URLs for a complex project
我應該如何使這種API可用?
如果#2是正確的選項。我應該只返回項目清單嗎?或者返回包含項目列表的客戶端?
您對最後說「如果您可能使用項目數據...」的評論似乎指的是將「/ api/clients/5」作爲始終返回項目數據(即使未明確要求)。我在問題結尾處問的是,在使用/ api/clients/5/projects時,這些項目是否應該包裝在客戶端對象中?這樣,客戶端控制器仍然只是返回客戶端...我想不是,就好像您調用該url,您可能已經擁有客戶端對象的數據。只需尋找確認... – Lee 2015-02-06 09:16:13
如果我調用了'/ api/clients/5/projects',那麼我會期望結果中的根對象是項目,而不是客戶端。實際上,您可以向您的項目控制器請求這樣的路由,您只需在默認的'api/{controller}/{id}'之前定義路由。 – user1620220 2015-02-06 13:17:13
這正是我所做的 - 感謝您的幫助:) – Lee 2015-02-06 21:17:48