restful請求風格使用詳解

2022-09-14 17:27:20 字數 2294 閱讀 5589

參考:

傳統方式操作資源:通過不同引數實現不同的效果!方法單一,post和get

查詢,get

新增,post

更新,post

刪除,get或post

查詢,get

新增,post

更新,put

刪除,delete

restful架構風格規定,資料的元操作,即crud(create, read, update和delete,即資料的增刪查改)操作,分別對應於http方法:

get用來獲取資源(查詢)

post用來新建資源(新增)

put用來更新資源(修改)(客戶端提供改變後的完整資源)

patch用來更新資源(修改)(客戶端提供改變的屬性)

delete用來刪除資源(刪除)

這樣就統一了資料操作的介面,僅通過http方法,就可以完成對資料的所有增刪查改工作

restful架構中,每個**代表一種資源(resource),所以**中不能有動詞,只能有名詞,而且所用的名詞往往與資料庫的**名對應。一般來說,資料庫中的表都是同種記錄的"集合"(collection),所以api中的名詞也應該使用複數。

舉例來說,有乙個api提供動物園(zoo)的資訊,還包括各種動物和雇員的資訊,則它的路徑應該設計成下面這樣。

下面是一些例子:

get /zoos:列出所有動物園

post /zoos:新建乙個動物園

get /zoos/id:獲取某個指定動物園的資訊

put /zoos/id:更新某個指定動物園的資訊(提供該動物園的全部資訊)

patch /zoos/id:更新某個指定動物園的資訊(提供該動物園的部分資訊)

delete /zoos/id:刪除某個動物園

get /zoos/id/animals:列出某個指定動物園的所有動物

delete /zoos/id/animals/id:刪除某個指定動物園的指定動物

如果記錄數量很多,伺服器不可能都將它們返回給使用者。api應該提供引數,過濾返回結果。

下面是一些常見的引數:

?limit=10:指定返回記錄的數量

?offset=10:指定返回記錄的開始位置。

?page=2&per_page=100:指定第幾頁,以及每頁的記錄數。

?sortby=name&order=asc:指定返回結果按照哪個屬性排序,以及排序順序。

?animal_type_id=1:指定篩選條件

1、url 中不應該出現任何表示操作的動詞,鏈結只用於對應資源;

2、url 中應該單複數區分,推薦的實踐是永遠只用複數;比如get /api/users表示獲取使用者的列表;如果獲取單個資源,傳入 id,比如/api/users/123表示獲取單個使用者的資訊;(個人覺得還是要區分一下單複數,/api/users表示獲取使用者的列表;/api/user/123表示獲取單個使用者的資訊。這樣寫的好處是通過位址就能得知返回的是實體是乙個物件,還是乙個集合)

3、按照資源的邏輯層級,對 url 進行巢狀,比如乙個使用者屬於某個團隊,而這個團隊也是眾多團隊之一;那麼獲取這個使用者的介面可能是這樣:get /api/teams/123/members/234 表示獲取 id 為 123 的小組下,id 為234 的成員資訊。

按照類似的規則,可以寫出如下的介面

/api/teams (對應團隊列表)

/api/teams/123 (對應 id 為 123 的團隊)

/api/teams/123/members (對應 id 為 123 的團隊下的成員列表)

/api/teams/123/members/456 (對應 id 為 123 的團隊下 id 未 456 的成員)

@restcontroller

public class usercontroller

public user getoneuser(@pathvariable("id") int id)

public int adduser(user user)

public int deleteuser(@pathvariable("id") int id)

public int updateuser(user user)

}

Restful風格請求方式技巧

通常我們的form表單的請求方式是pos方式,我們在使用restful風格的api時,可以修改表單的請求方式為其他,具體如下 1 springmvc中配置hiddenhttpmethodfilter springboot自動配置好的 2 頁面建立乙個post表單 3 建立乙個input項,name ...

Http請求Restful風格的遠端呼叫

由於最近專案中用到了工作流,由於工作流是別的專案組開發的,所以在專案的開發過程中,用到了兩個專案之間的方法的遠端呼叫。所以下面我們一起來了解一下具體的操作。在方法的呼叫過程中存在兩種形式post方式請求呼叫和get方式請求呼叫,下面我們來看一下這兩種方式的具體的請求寫法。try catch ioex...

使用RESTful風格開發Java Web

rest是representational state transfer的縮寫 一般中文翻譯為表述性狀態轉移 rest 是一種體系結構,而 http 是一種包含了 rest 架構屬性的協議,為了便於理解,我們把它的首字母拆分成不同的幾個部分 簡單地說,rest 就是將資源的狀態以適合客戶端或服務端的...