restful規範和restframework框架

什麼是接口?

接口能夠理解爲url就是接口.面試

那麼在其餘語言裏面接口也能夠是約束類redis

 

restful規範是什麼?

RESTful是目前最流行的一種互聯網軟件架構。它結構清晰、符合標準、易於理解、擴展方便,因此正獲得愈來愈多網站的採用。數據庫

URL:django

1.url體現版本編程

2.url體現是APIjson

3.用HTTPSapi

4.條件緩存

5.面向資源編程服務器

6.根據method的不用進行不一樣的操做restful

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規範?

restful是一個規範,規定API如何編寫,經過它咱們可讓api更加簡潔可維護

好比,最直觀的根據method的不一樣進行不一樣的操做,原來這些都是url設置的

除此以外:

  -api標識

  -版本

  -面向資源編程

  -狀態碼

  -返回值

  -錯誤信息

  -hypemedia link

 

RestFrameWork框架是什麼?

幫助咱們快速的開發符合restful規範的接口

有什麼功能:

1.路由

2.視圖

3.版本

4.認證

5.權限

6.頻率

7.解析器

8.序列化

9.分頁

10.渲染器

 談談你對 django restframework的認識:

  -路由

    -能夠經過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

    Content-Type :application/json

  -分頁

    -對從數據庫中取到的數據進行分頁處理. SQL---> limit offset

      -根據頁碼:http://www.luffycity.com/api/v1/student/?page=1&size=10

      -根據索引:http://www.luffycity.com/api/v1/student/?offset=60(遊標位置)&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

相關文章
相關標籤/搜索