2013-04-09 94 views
5

我正在創建一個Web服務,我對路徑名有一些疑問。如何在RESTful Web服務中的資源中指定操作?命名RESTful路徑

例如:測驗資源。你有正常的CRUD操作,你也想在測驗中做些事情。如產生一個新的測驗。這是一個行動。你使用類似/quiz/top5/quiz?type=top5的路徑還是什麼?

我不明白在創建RESTful服務時如何編寫對資源執行操作的路徑。

+0

我會使用'/ quiz/generate/123'作爲id'123' – 2013-04-09 15:00:08

+0

我會使用'/ quiz/{id}' – 2013-04-09 15:00:41

回答

1

我就從apigee推薦這本電子書:Web API Design: Crafting Interfaces that Developers Love

按照他們的建議:

  • 的語用REST風格的設計排名第一的原則是:保持簡單 事情簡單。
  • 保持您的基本網址簡單直觀。
+------------+-------------------+--------------+----------------------------------------+------------------+ 
| Resource | POST create  | GET read  | PUT update        | DELETE delete | 
| /quizzes | Create a new quiz | List quizs | Bulk update quizs      | Delete all quizs | 
| /quizes/12 | Error    | Show Quiz 12 | If exists update Quiz 12, if not Error | Delete Quiz 12 | 
+------------+-------------------+--------------+-----------------------------------------+------------------+ 

關於你想要的頂級目錄,也許類似於他們的「分頁和部分緩解」一節中勾勒出一個解決方案可滿足您的需求:

quizzes/top?limit=5

通過這種方式,您可以首先製作具有默認值(5或10個項目)的資源quizs/top,然後提供分頁/更改項目數量的功能。

+0

如果您要遵循該電子書中的指導原則並擁有2個基準網址。你將如何獲得由服務器隨機生成的新測驗?/quize保留列出所有測驗(集合)? – LuckyLuke 2013-04-09 17:20:13

+0

我不是在客戶端創建它,我只是想從服務器生成一個 – LuckyLuke 2013-04-09 17:25:10

+0

我會去測驗/隨機(順便說一句,我要編輯我的帖子來寫測驗複數 - quizzes-正確:-) – jalopaba 2013-04-09 17:36:58

0

這真的取決於你 - RESTful模式不要求命名約定。

What are the best/common RESTful url verbs and actions?這可能對你有幫助嗎?

只要路線合理:例如測驗/顯示/ {編號},測驗/頂部/ {編號}等...

編輯:添加回答評論圍繞路線行動命名,取自Rails公約。 http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions

+0

那麼如何編寫在資源上觸發「進程」的路徑呢?我的意思是像一個動作,而不僅僅是CRUD路徑? – LuckyLuke 2013-04-09 15:03:34

+0

查看編輯abouve ... – diagonalbatman 2013-04-09 15:04:21

+0

在另一個答案他說,你應該使用URL來指定對象,而不是動作。嗯...所以你使用「top」指定對象的例子? – LuckyLuke 2013-04-09 15:07:10

0

我推薦閱讀這個回答https://stackoverflow.com/a/11170376/300886到類似的問題。

一般來說,你應該考慮你的API的哪些部分應該可以通過GET獲得,哪些通過POST獲得。通過GET可用的資源通常應該使用名詞來描述,動作(比如可能發佈測驗的答案)應該可以通過使用動詞描述的POST(或DELETE,可能)來描述,可能在名詞 - 資源的名稱之後該行爲已被採納。

0

this文章中所解釋的,其更適於使用目錄結構作爲REST URL。

的URL像/{type}/{operation}/{param1}/{param2}...

看起來更加直觀和maitainable(帕拉姆可以作爲經典?=,如果他們有太多的傳遞)

所以在你的情況下,可以/quiz/top/5或者明天應該是前100,則同樣能爲/quiz/top/100

0

網址識別你的對象被重複使用。 HTTP方法指定服務器應該在對象上執行的動作(或操作)。

例如:

/quiz/top5 
  • HTTP GET:客戶端請求查看測驗TOP5,這意味着創建一個新的?或者這是否意味着顯示一個現有的?這取決於你(GET的慣例是在不改變服務器狀態的情況下請求對象)。
  • HTTP POST:客戶端請求保存變更
+0

top5部分將意味着動態處理前5個對象的列表。那麼這適合識別物體的保護傘?不採取行動? – LuckyLuke 2013-04-09 15:24:16

+0

完全正確。 – Ulises 2013-04-09 15:33:37