django RESTful設計方法

2021-08-25 14:01:17 字數 2279 閱讀 9604

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

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

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

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

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

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作為鍵名,出錯資訊作為鍵值即可。

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

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

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

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

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

django restful中去掉csrf驗證

使用django restful時候,想取消掉csrf的驗證,單獨引入django的 csrf exempt發現不起作用,原因是django restful 的token中介軟體會再次啟用csrf 自己寫乙個中介軟體,取消django restful的csrf驗證 from django.utils...

設計模式 設計原則與設計模式

一切設計都為了 的可擴充套件性和可讀性,都為了應對變化!我們是基於設計原則的思想,來選擇設計模式去實現,可讀,可擴充套件的目標!核心設計思想 對擴充套件開放,對修改關閉。含義 抽象可變功能,可變功能通過子類擴充套件實現,避免對已有抽象實現的修改。優點 便於擴充套件 核心設計思想 單個方法或單個類或單...

設計模式 設計模式

物件導向程式設計 oop 的基本概念有 封裝,抽象,繼承,多型等,如何開發出可復用的物件導向軟體一直困擾著軟體開發人員。可復用的物件導向技術包括類的繼承,物件的組合和引數化型別 generic gof的巨著 設計模式 總結出可復用的物件導向的23個設計模式,並且歸類成 建立型模式,結構型模式和行為型...