**HTTP是一種能夠擷取如 HTML 這樣的網絡資源的 **protocol(通訊協定)。它是在 Web 上進行資料交換的基礎,是一種 client-server 協定,也就是說,請求通常是由像浏覽器這樣的接受方發起的。一個完整的Web文檔通常是由不同的子文檔拼接而成的,像是文本、布局描述、圖檔、視訊、腳本等等。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiQDOxEzX3xCZlhXam9VbsUmepNXZy9CXwJWZ3xCdh1mcvZ2Lc1zaHRGcWdUYuVzVa9GczoVdG1mWfVGc5RHLwIzX39GZhh2csATMflHLwEzX4xSZz91ZsAzMfRHLGZkRGZkRfJ3bs92YskmNhVTYykVNQJVMRhXVEF1X0hXZ0xiNx8VZ6l2cssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzUDM3cTM0I2MhBDO1QmYyYzXwEDMwYTMwMzLcZDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
1. HTTP請求互動的基本過程
- 前後應用從浏覽器端向伺服器發送HTTP請求(請求封包)
- 背景伺服器接收到請求後,排程伺服器應用處理請求,向浏覽器傳回HTTP響應(響應封包)
- 浏覽器端接收到響應,解析顯示響應體/調用監視回調
2. HTTP請求封包
- 請求行:method url: GET/url, POST/url
- 多個請求頭
Host: www.baidu.com
Cookie: BAIDUID=AD3B0FA706E; BIDUPSID=AD3B0FA706;
Content-Type: application/x-www-form-urlencoded 或者 application/json
- 請求體
username=tom&pwd=123
{“username”: “tom”, “pwd”: 123}
3. HTTP響應封包
- 響應狀态行: status statusText
-
多個響應頭
Content-Type: text/html;charset=utf-8
Set-Cookie: BD_CK_SAM=1;path=/
-
響應體
html 文本/json 文本/js/css/圖檔…
4. post請求體參數格式
- Content-Type:application/x-www.form-urlencoded;charset=utf-8
用于鍵值對參數,參數的鍵值用=連接配接,參數之間用&連接配接
例如: name=%E5%B0%8F%E6%98%8E&age=12
- Content-Type:application/json;charset=utf-8
用于 json 字元串參數
例如: {“name”: “%E5%B0%8F%E6%98%8E”, “age”: 12}
- Content-Type: multipart/form-data
用于檔案上傳請求
5. 常見的響應狀态碼
200 OK 請求成功。一般用于GET與POST請求
201 Created 已建立。成功請求并建立了新的資源
401 Unauthhorized 未授權/請求要求使用者的身份認證
404 Not Found 伺服器無法根據用戶端的請求找到資源
500 Internal Server Error 伺服器内部錯誤,無法完成請求
6. 不同類型的請求及作用
- GET: 從伺服器端讀取資料
- POST: 向伺服器端添加新資料
- PUT: 更新伺服器端已經資料
- DELETE: 删除伺服器端資料
7. API的分類
-
REST API: restful
(1) 發送請求進行CRUD哪個操作由請求方式來決定
(2) 同一個請求路徑可以進行多個操作
(3) 請求方式會用到GET/POST/PUT/DELETE
-
非 REST API: restless
(1) 請求方式不決定請求的CRUD操作
(2) 一個請求路徑隻對應一個操作
(3) 一般隻有GET/POST
9. 使用 **json-server **搭建 REST API
9.1 json-server是什麼**?**
用來快速搭建 REST API 的工具包
9.2 如何使用json-server
- 全局安裝json-server
npm install -g json-server
- 目标根目錄下建立資料庫json檔案:db.json
{
"posts": [
{ "id": 1, "title": "json-server", "author": "typicode" }
], "comments": [
{ "id": 1, "body": "some comment", "postId": 1 } ],
"profile": { "name": "typicode" } }
- 啟動伺服器執行指令
json-server --watch db.json