介面可以理解為url就是介面.
那麼在其他語言裡面介面也可以是約束類
restful是目前最流行的一種網際網路軟體架構。它結構清晰、符合標準、易於理解、擴充套件方便,所以正得到越來越多**的採用。
url:
1.url體現版本
2.url體現是api
3.用https
4.條件
5.面向資源程式設計
6.根據method的不用進行不同的操作
7.響應時新增狀態碼
常見的狀態碼
200 ok -[get]:伺服器成功返回使用者請求的資料,該操作是冪等的(idempotent)。狀態碼response('...',status=200)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 - [*]:伺服器發生錯誤,使用者將無法判斷發出的請求是否成功。
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 就是這樣的乙個規範,我們都應該遵守這樣的乙個規範。越來越多的人意識到,即軟體,而且是一種新型的軟體 開發,完全可以採用軟體開發的模式。但是傳統上,軟體和網路是兩個不同的領域,網際網路的興起讓這...