restful規範和restframework框架

2022-08-01 10:21:12 字數 3442 閱讀 3118

介面可以理解為url就是介面.

那麼在其他語言裡面介面也可以是約束類

restful是目前最流行的一種網際網路軟體架構。它結構清晰、符合標準、易於理解、擴充套件方便,所以正得到越來越多**的採用。

url:

1.url體現版本

2.url體現是api

3.用https

4.條件

5.面向資源程式設計

6.根據method的不用進行不同的操作

7.響應時新增狀態碼

常見的狀態碼

200 ok -[get]:伺服器成功返回使用者請求的資料,該操作是冪等的(idempotent)。

201 created - [post/put/patch]:使用者新建或修改資料成功。

202 accepted - [*]:表示乙個請求已經進入後台排隊(非同步任務)

204 no content -[delete]:使用者刪除資料成功。

400 invalid request - [post/put/patch]:使用者發出的請求有錯誤,伺服器沒有進行新建或修改資料的操作,該操作是冪等的。

401 unauthorized - [*]:表示使用者沒有許可權(令牌、使用者名稱、密碼錯誤)。

403 forbidden - [*] 表示使用者得到授權(與401錯誤相對),但是訪問是被禁止的。

404 not found - [*]:使用者發出的請求針對的是不存在的記錄,伺服器沒有進行操作,該操作是冪等的。

406 not acceptable -[get]:使用者請求的格式不可得(比如使用者請求json格式,但是只有xml格式)。

410 gone -[get]:使用者請求的資源被永久刪除,且不會再得到的。

422 unprocesable entity - [post/put/patch] 當建立乙個物件時,發生乙個驗證錯誤。

500 internal server error - [*]:伺服器發生錯誤,使用者將無法判斷發出的請求是否成功。

狀態碼response('...',status=200)

8.不同的操作給不同的返回值

get:返回全部的資料

post:返回新的資料(規範是返回新的資料,但是我們要根據業務邏輯看新的資料是否有價值,)

get:獲取單挑資料

put:返回修改的資料

patch:返回修改的資料

delete:返回空

9.返回錯誤資訊

10.詳細資訊.

restful是乙個規範,規定api如何編寫,通過它我們可以讓api更加簡潔可維護

比如,最直觀的根據method的不同進行不同的操作,原來這些都是url設定的

除此之外:

-api標識

-版本-面向資源程式設計

-狀態碼

-返回值

-錯誤資訊

-hypemedia link

幫助我們快速的開發符合restful規範的介面

有什麼功能:

1.路由

2.檢視

3.版本

4.認證

5.許可權

6.頻率

7.解析器

8.序列化

9.分頁

10.渲染器

-路由-可以通過as_view傳引數,根據請求方式的不同執行響應的方法

-可以在url中設定乙個結尾類似於.json

-檢視-幫助開發者提供了一些類,並在類提供了很多的方法供我們使用

-版本-在url中設定version引數,使用者請求傳入引數時,在request.version中獲取版本,根據版本的不同做不同的處理

-認證- 寫乙個類並註冊到認證類,在類的authticate方法中編寫認證邏輯

-認證成功(user,auth)

-rase authticatefaild(..)

-none 繼續

- 許可權

-寫乙個類並註冊的許可權類,在類的has_permission方法中寫許可權邏輯

-true  

-false

-頻率限制

-寫乙個類並註冊的許可權類,在類的allow_requset/wait 方法中寫許可權邏輯

-匿名-使用者

返回true  或者false  如果返回false 那麼要執行wait

-解析器:

-根據contenttype請求頭,選擇不同的解析器對請求體中的資料進行解析.

content-type : url-formedo

-分頁-對從資料庫中取到的資料進行分頁處理. sql---> limit offset

-根據頁碼:

-根據索引:游標位置)&limit=10

-根據加密:

-序列化

對queryset序列化以及對請求資料格式校驗

-渲染器

-根據url中傳入的字尾,決定在資料如何渲染到頁面上.

在使用者登入的時候進行判斷是否登入過來決定是更新還是建立token

(update_or__create)下次訪問的時候要帶著token進行訪問.

如果認證失敗則丟擲異常,認證成功需要返回乙個元組

(request.user,request.auth)

為什麼要更新token?

如果你的token一直是同乙個值的話,那麼如果別人獲取了你的token值,就可以

偽造你進行一些不是你個人意願的操作

你的認證是只給乙個檢視還是全域性的?

這個認證是可單檢視也可以是全域性的,

因為在原始碼裡邊,他先會去你編寫的類authentication_classes裡面取你設定的認證

如果沒有就去settings裡面找.在settings設定了就可以進行全域性認證

主要分為匿名使用者和非匿名使用者兩種型別,

先講講匿名使用者

假設我們一分鐘限制最多訪問10次

當請求進來的時候,以ip為key,值是乙個列表,列表裡套著時間戳,最新的時間放在最左邊

1.如果使用者在20秒內訪問了10次,那麼列表裡就有10個時間戳,當他再次訪問的時候

拿訪問的時間-60秒跟10次最舊的時間相比,如果比它小,那麼不能進行訪問.

2.如果訪問的時間大於10個,那麼把列表的10個清空放置最新的時間

使用者的話就可以用使用者名為key來實現.

本質上這種方式只能夠防小白,稍微有經驗的都會用**ip然後隨機獲取進行訪問

或者隨機用不同的使用者進行爬取資訊

頻率的限制分兩種:

一種是匿名使用者

當匿名使用者訪問的時候,把它的ip為key,value值對應乙個列表裡面裝訪問的時間戳,

下一次匿名使用者訪問的時候,對比列表的時間戳的時間戳,把不符合的剔除跳.超時的.

然後再對比他的個數

如果是使用者的話那麼把使用者名稱作為key

這是看自己原始碼學習的,但是我想啊

對於匿名使用者來說,如果他有很多**的ip隨機訪問,那麼我們就捕捉不到他,不能給他做

頻率的限制.

預設將訪問記錄放在了快取中: redis/mecached

RESTful 規範和Postman除錯

什麼是restful restful本質是一種軟體架構風格,其核心是面向資源,能降低開發的複雜性和提高系統的可伸縮性。設計概念和準則 網路上的所有事物都可以被抽象為資源 每乙個資源都有唯一的資源標識,對資源的操作不會改變這些標識。所有的操作都是無狀態的 soap和rest的區別 效率和易用性 安全性...

restful介面規範

資源 resource 任何東西都是一種資源,例如,一篇部落格文章 表示 representation 資源的一種表現形式,例如,json xml url 每個資源都應該有乙個對應的url uri url是uri的一種,url都有對應的資源,而uri不一定,它強調的是一種資源標識 get 獲得乙個資...

restful規範介紹

團隊之間協作有很多的介面規範,團隊做大了,平台之間的資料傳輸的規範需要定義好。需要有乙個閥,restful 就是這樣的乙個規範,我們都應該遵守這樣的乙個規範。越來越多的人意識到,即軟體,而且是一種新型的軟體 開發,完全可以採用軟體開發的模式。但是傳統上,軟體和網路是兩個不同的領域,網際網路的興起讓這...