1.1 什么是RESTful
- REST與技術無關,代表的是一種軟件架構風格(REST是Representational State Transfer的簡稱,中文翻譯為“表征狀態轉移”)
- REST從資源的角度類審視整個網絡,它將分布在網絡中某個節點的資源通過URL進行標識
- 所有的數據,不過是通過網絡獲取的還是操作(增刪改查)的數據,都是資源,將一切數據視為資源是REST區別與其他架構風格的最本質屬性
- 對於REST這種面向資源的架構風格,有人提出一種全新的結構理念,即:面向資源架構(ROA: Resource Oriented Architecture)
1.web開發本質
- 對數據庫中的表進行增刪改查操作
- Restful風格就是把所有數據都當做資源,對表的操作就是對資源操作
- 在url同通過 資源名稱來指定資源
- 通過 get/post/put/delete/patch 對資源的操作
2.RESTful API設計規范
- 1.API與用戶的通信協議,總是使用HTTPs協議。
- 2.域名
# 1)子域名方式
https://api.example.com #盡量將API部署在專用域名(會存在跨 域問題)
https://www.example.com
# 2)url方式
https://example.org https://example.org/api/ # API很簡單
URL 如:https://api.example.com/v1/
請求頭跨域時,引發發送多次請求
- 4.
面向資源編程
: 路徑,視網絡上任何東西都是資源,均使用名詞表示(可復數)
https://api.example.com/v1/zoos
https://api.example.com/v1/animals
https://api.example.com/v1/employees
GET(查詢數據) # 從服務器取出資源(一項或多項)
POST(創建數據) # 在服務器新建一個資源
PUT(修改數據) # 在服務器更新資源(客戶端提供改變后的完整資源)
PATCH(修改屬性) # 在服務器更新資源(客戶端提供改變的屬性)
DELETE(刪除數據) # 從服務器刪除資源
- 6.
過濾,分頁,排序
:通過在url上傳參的形式傳遞搜索條件
https://api.example.com/v1/zoos?limit=10:指定返回記錄的數量
https://api.example.com/v1/zoos?offset=10:指定返回記錄的開始位置
https://api.example.com/v1/zoos?page=2&per_page=100:指定第幾頁,以及每頁的記錄數
https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回結果按照哪個屬性排序, 以及排序順序
https://api.example.com/v1/zoos?animal_type_id=1:指定篩選條件
'''1. 2XX請求成功'''
# 200 請求成功,一般用於GET與POST請求
# 201 Created - [POST/PUT/PATCH]:用戶新建或修改數據成功。
# 202 Accepted - [*]:表示一個請求已經進入后台排隊(異步任務)
# 204 NO CONTENT - [DELETE]:用戶刪除數據成功。
'''2. 3XX重定向''' #
301 NO CONTENT - 永久重定向
# 302 NO CONTENT - 臨時重定向
'''3. 4XX客戶端錯誤'''
# 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] 當創建一個對象時,發生一個驗證錯誤。
'''4. 5XX服務端錯誤'''
# 500 INTERNAL SERVER ERROR - [*]:服務器內部錯誤,無法完成請求
# 501 Not Implemented 服務器不支持請求的功能,無法完成請求
更多狀態碼參考:https://www.runoob.com/http/http-status-codes.html