RESTful設計方法

2022-07-06 23:36:17 字數 2540 閱讀 2834

rest

rest,即representational state transfer的縮寫。維基百科稱其為「具象狀態傳輸」,國內大部分人理解為「表現層狀態轉化」。

restful是一種開發理念。維基百科說:rest是設計風格而不是標準。 rest描述的是在網路中client和server的一種互動形式;rest本身不實用,實用的是如何設計 restful api(rest風格的網路介面),一種全球資訊網軟體架構風格。

應該盡量將api部署在專用網域名稱之下。

如果確定api很簡單,不會有進一步擴充套件,可以考慮放在主網域名稱下。

應該將api的版本號放入url。

另一種做法是,將版本號放在http頭資訊中,但不如放入url方便和直觀。github採用這種做法。

因為不同的版本,可以理解成同一種資源的不同表現形式,所以應該採用同乙個url。版本號可以在http請求頭資訊的accept欄位中進行區分:

accept: vnd.example-com.foo+json; version=1.0

accept: vnd.example-com.foo+json; version=1.1

accept: vnd.example-com.foo+json; version=2.0

路徑又稱"終點"(endpoint),表示api的具體**,每個**代表一種資源(resource)

(1) 資源作為**,只能有名詞,不能有動詞,而且所用的名詞往往與資料庫的表名對應。

舉例來說,以下是不好的例子:

/getproducts

/listorders

/retreiveclientbyorder?orderid=1

對於乙個簡潔結構,你應該始終用名詞。 此外,利用的http方法可以分離**中的資源名稱的操作。

get /products :將返回所有產品清單

post /products :將產品新建到集合

get /products/4 :將獲取產品 4

patch(或)put /products/4 :將更新產品 4

(2) api中的名詞應該使用複數。無論子資源或者所有資源。

舉例來說,獲取產品的api可以這樣定義

對於資源的具體操作型別,由http動詞表示。

常用的http動詞有下面四個(括號裡是對應的sql命令)。

還有三個不常用的http動詞。

下面是一些例子。

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:指定篩選條件

引數的設計允許存在冗餘,即允許api路徑和url引數偶爾有重複。比如,get /zoos/id/animals 與 get /animals?zoo_id=id 的含義是相同的。

伺服器向使用者返回的狀態碼和提示資訊,常見的有以下一些(方括號中是該狀態碼對應的http動詞)。

如果狀態碼是4xx,伺服器就應該向使用者返回出錯資訊。一般來說,返回的資訊中將error作為鍵名,出錯資訊作為鍵值即可。

針對不同操作,伺服器向使用者返回的結果應該符合以下規範。

restful api最好做到hypermedia(即返回結果中提供鏈結,連向其他api方法),使得使用者不查文件,也知道下一步應該做什麼。

比如,github的api就是這種設計,訪問api.github.com會得到乙個所有可用api的**列表。

從上面可以看到,如果想獲取當前使用者的資訊,應該去訪問api.github.com/user,然後就得到了下面結果。

上面**表示,伺服器給出了提示資訊,以及文件的**。

伺服器返回的資料格式,應該盡量使用json,避免使用xml。

RESTful設計方法

為什麼使用restful representational state transfer 表現層狀態轉化 資源定位及資源操作 表象層面說就是通過get,post,put,delete方式來實現前後臺通訊的一種輕量級,跨平台,跨語言架構設計風格的web服務 1 增加商品 增加商品 post add g...

RESTful 你了解RESTful設計要素嗎

在restful架構中,每個 代表一種資源,所以 中不能有動詞,只能有名詞。一般來說api中的名詞應該使用複數。例如 有乙個api提供動物園 zoo 的資訊,還包括各種動物和雇員的資訊,它的路徑應該設計成 動物園資源 動物資源 雇員資源 https 協議頭。v1 關於api的版本號 還可以加到htt...

設計風格 Restful

rest是設計風格而不是標準,只提供了一組設計原則和約束條件 資源由uri來指定 uri 統一資源識別符號 對資源的包括包括獲取 建立 修改 和刪除資源 這些操作正好對應http協議提供的get post put和delete方法 通過操作資源的表現形式來操作資源 非rest風格url http q...