2013-07-15 212 views
9

我不太想知道如何合理構建REST(或類似REST)API。需要幫助瞭解REST API端點

想象一下創建和發送時事通訊電子郵件的API。您可能擁有以下名詞/資源:新聞簡報(主題,正文等),郵件列表(收件人集合)和收件人(電子郵件地址和相關數據)。

所以,你可以使用PUT創建一個資源並返回其ID:

/newsletter 
/list 
/user 

你可以使用GET獲得的資源的信息:

/newsletter/[id] 
/list/[id] 
/user/[id] 

可以使用更新現有資源PATCH(或這應該是POST):

/newsletter/[id] 
/list/[id] 
/user/[id] 

可以使用DELETE刪除資源:

/newsletter/[id] 
/list/[id] 
/user/[id] 
  1. 就是上面是否正確?

  2. 什麼端點是明智的行動,如發送通訊到列表,添加一個用戶列表?

下面是否有意義,它是RESTfull?

/newsletter/[newsletter_id]/send/[mailinglist_id] 
/list/[list_id]/add/[user_id] 
/list/[list_id]/remove/[user_id] 

它是多餘的或毫無幫助有list/[id]/add/[id]list/[id]/remove/[id]端點列表,當用戶可以添加或/list/[id]通過PATCH刪除?

如何通過電子郵件地址或名稱等屬性搜索用戶的ID?或者通過標識符來獲取列表,如名稱或創建時間?

回答

7

除了/list/[list_id]/add/[user_id]/list/[list_id]/remove[user_id]之外,你幾乎已經注意到了它,因爲在URL中有動詞 - 這是HTTP方法的用途。改變他們,例如:

PUT (or POST) to /list/[list_id]/users/ for adding a user to the list 

DELETE to /list/[list_id]/users/[user_id] 

對於搜索,我會用參數化URL去的資源列表,如:

/newsletter/?name=dfjkhskdfh 
+0

「發送」動詞怎麼樣? – jeremiahs

1

這些動詞經常困惑:

  1. 要創建一個實體您使用POST
  2. 更新 - PUT

這些東西可以通過以下方式進行處理:

POST /newsletters/[newsletter_id]/mailinglists/[mailinglist_id]/mailingfacts - 執行發送信件,它就像添加郵件的事實向收集

/lists/[list_id]/[user_id] - 將用戶添加到列表中

/lists/[list_id]/[user_id] - 從列表中刪除用戶。