# Restful API
>[success]`Restful API`是目前`Web API` 設計中比較流行的一種設計風格。
## Restful API
>[info]RESTful是一種軟件架構風格、設計風格,而**不是**標準,只是提供了一組設計原則和約束條件。
>[danger]對于這種風格,ThinkPHP框架和laravel框架都給了很好的支持。
### 一、常用的HTTP動詞
>[success]這種風格對于熟悉ThinkPHP框架的應該都比較熟悉。
~~~
* GET:讀取(Read)
* POST:新建(Create)
* PUT:更新(Update)
* PATCH:更新(Update),通常是部分更新
* DELETE:刪除(Delete)
~~~
>[danger]大家可能會發現,通常情況下的網絡請求主要是`POST`和`GET`。通常情況下客戶端是不支持除`GET`和`POST`之外的請求方式的。這里的解決方案就是:客戶端發出的 HTTP 請求,要加上`X-HTTP-Method-Override`屬性,來指定請求方式。
~~~http
POST /api/Person/4 HTTP/1.1
X-HTTP-Method-Override: PUT
~~~
### 二、URI與URL
#### URI
>[info]URI,統一資源標志符(Uniform Resource Identifier, URI),表示的是web上每一種可用的資源
URI通常由三部分組成:
①訪問資源的命名機制;
②存放資源的主機名;
③資源自身的名稱。
#### URL
>[danger]URL是URI的一個子集。
URL的格式由三部分組成:?
①第一部分是協議(或稱為服務方式)。
②第二部分是存有該資源的主機IP地址(有時也包括端口號)
③第三部分是主機資源的具體地址,如目錄和文件名等。
### 三、端點設計
>[success]端點是指用于訪問API的URI
設計原則
1. 短小便于輸入的URI
2. 人可以讀懂的URI
3. 沒有大小寫混用的URI
4. 修改方便的URI
5. 不會暴漏服務器端架構的URI
6. 規則統一的URI
例:
|目的|端點|方法|
|-|-|-|
|獲取用戶信息列表|http://api.yifeng.com/v1/users|GET|
|新用戶注冊|http://api.yifeng.com/v1/users|POST|
|獲取特定用戶信息|http://api.yifeng.com/v1/users/:id|GET|
|更新用戶信息|http://api.yifeng.com/v1/users/:id|PUT/PATCH|
|刪除用戶信息|http://api.yifeng.com/v1/users/:id|DELETE|
### 四、HTTP狀態碼
客戶端的每一次請求,服務器都必須給出回應。回應包括 HTTP 狀態碼和數據兩部分。當然,也可以根據需求再返回一個 業務狀態碼。具體的規范可以自行設定。
HTTP 狀態碼就是一個三位數,分成五個類別。
|狀態碼|含義|
|-|-|
|1字頭|消息|
|2字頭|成功|
|3字頭|重定向|
|4字頭|客戶端原因引起的錯誤|
|5字頭|服務器端原因引起的錯誤|
主要的狀態碼
|狀態碼|名稱|含義|
|-|-|-|
|200|OK|請求成功|
|201|Created|請求成功,新資源建立|
|202|Accept|請求成功|
|204|No Content|請求成功,沒有內容|
|300|Multiple Choices|存在多個資源|
|301|Moved Permanently|資源被永轉移|
|302|Found|請求的資源被暫時轉移|
|303|See Other|引用他處|
|400|Bad Request|請求不正確|
|401|Unauthorized|需要認證|
|403|Forbidden|禁止訪問|
|404|Not Found|沒有找到指定的資源|
|429|Too Many Requests|訪問次數過多|
|500|Internal Server Error|服務器端發生錯誤|
|503||服務器暫時停止運營
>[danger]關于狀態碼這一塊大家可以到百度上去了解一下。業務狀態碼是咱們自行定義的!
### 五、服務器回應
>[success]一般情況下,服務器不要回復純文本的數據,通常情況下返回的是`XML`或`JSON`格式的數據。
>[danger] Web API其實就是網頁的一種,其返回的數據形式更容易讓計算機程序處理,而不是返回普通的HTML。所以返回的數據應該盡可能地設計得方便計算機程序處理。
>[info]在這里就使用JOSN作為返回的數據格式。
#### 數據格式返回的指定方法
1. 使用查詢參數的方法
2. 使用擴展名的方法
3. 使用在請求首部指定媒體類型的方法
>[danger]如果您的接口不需要同時支持多種類型,也可以不需要進行執定。
>[danger]在返回數據時,在滿足需求的情況下,返回的數據量越小越好。(可以讓用戶來決定返回的數據)
#### 返回數據的封裝
>[info]關于響應返回的數據格式,建義封裝成統一樣的格式。
### 六、版本號
>[success]關于版本號的,有多種解決方案。在這里使用ThinkPHP自帶的解決方案。
### 七、API接口文檔
>[success]通常情況下,API接口的開發者和使用者是不同的人群,所以做一詳細的接口文檔是十分必要的。
- 項目介紹
- 課前準備
- 前言
- APP端開發
- HBuildX快速創建uniapp項目
- UniAPP基本知識
- 官方組件練習
- uniapp代碼塊
- APP登錄頁面的制作
- 用戶注冊頁面制作
- 密碼找回頁面制作
- 計價頁面制作
- 詳情頁面制作
- 計價依據頁面制作
- VUE快速入門
- Vue在uniapp中的應用
- APP數據模擬
- uniAPP云打包
- UniAPP離線打包
- 后端開發
- ThinkPHP的快速入門
- thinkPHP6.*的安裝
- ThinkPHP6的入門介紹
- ThinkPHP6.0中的配置
- 入口文件隱藏
- 命令行工具
- Facade(門面)
- 數據遷移
- 數據填充
- 后端應用的創建
- 路由地址和Url地址的生成
- 后臺模板的引入
- 多入口文件的應用以及多入口文件的隱藏
- 后臺管理員模塊開發
- 管理員表的設計
- 管理員密碼的修改
- 驗證器的使用
- 管理員登錄功能的實現
- 后臺權限控制的實現
- 驗證碼的使用
- 后臺系統配置功能開發
- 數據表的分析與設計
- 系統參數配置部分代碼的編寫
- 類型列表模板的引入
- 配置類型添加
- 配置類型的列表顯示
- 類型的編輯與刪除
- 代碼的優化
- 后臺配置類型條目管理
- 會員管理模塊
- API接口開發規范和注意事項
- API接口的設計規范
- RestfulAPI
- API接口安全
- 簽名
- Postman工具的簡單介紹
- API接口應用的創建
- API接口域名部署
- API接口的版本控制
- API接口跨域問題
- API接口開發
- 用戶注冊接口開發
- 代碼的實現
- 完善用戶注冊接口
- 代碼的封裝
- 參數過濾
- 簽名驗證
- 代碼結構優化
- 數據驗證
- 自定義驗證規則
- 全局異常處理
- 異常處理接管
- 手動拋出異常
- 重寫HttpException異常類
- 短信接口開發
- 短信接口
- 阿里云短信服務接入
- 完善短信接口
- 完善用戶注冊接口并實現短信的驗證
- 用戶密碼找回接口開發
- 實現流程與核心代碼
- 問題處理
- 用戶登錄接口開發
- 基本代碼的實現
- 用戶登錄實現
- 用戶登錄核心代碼
- 用戶授權驗證
- JWT的使用
- JWT的結構
- JWT的安裝
- token的生成
- 驗證
- JWT使用中的注意事項
- 基礎參數接口開發
- API接口的應用
- APP用戶登錄的實現
- 代碼優化
- 用戶注冊的實現
- 密碼找回功能的實現
- 計價功能的實現
- 自動登錄的實現
- 用戶登錄功能限制
- 項目打包(正式包)
- 小程序適配
- 前期準備
- 小程序的調試
- 真機調試
- 多端適配
- ThinkPHP6.0的注意事項
- 關于TP6框架升級問題
- 自定義分頁樣式