HTTP 是現代互聯網的基礎,對於 Web 和 API 的開發,這是非常重要的基本概念。有助於更好的理解和應用互聯網的技術,而學習這些都是為了後續的 API 測試作準備。
是在網絡上傳輸超文本的協定,定義了客戶端和伺服器之間的通信方式,以及如何請求和回應資源。
主要特點包括:
無狀態性 (stateless): 是指每個請求和回應都是獨立的,伺服器不會保留之前請求的信息,每個請求都是獨立的操作。
安全性: HTTP 本身是不安全的,但可以使用 HTTPS(HTTP Secure)
來加密通信,確保數據的保密性和完整性。
URL: 資源在 HTTP 中使用 URL (Uniform Resource Locator)
來進行唯一識別和定位。以獨一無二的方式來表示 Server 和 Server 上的資源 Resource。
Request Method: HTTP 定義了多種請求方法,最常見的是 GET
(獲取資料)、POST
(提交數據) 、PUT
(更新資料)、DELETE
(刪除資料) 等。
Headers: 請求和回應中的頭部包含了如 Content-Type
、Cookies
等信息。
Content-Type: 用於指示伺服器或客戶端傳送的資料的內容類型。它告訴接收方如何解讀請求或回應中的資料
POST 請求 Request
時,Content-Type
可以指定要發送的資料是 JSON 格式、表單資料(application/x-www-form-urlencoded
)或其他格式
而 回應 Response
時,常見的 Content-Type
值包括:
application/json
:用於指示資料是 JSON 格式。application/xml
:用於指示資料是 XML 格式。text/html
:用於指示資料是 HTML 頁面。image/jpeg
:用於指示資料是 JPEG 圖片。Body: POST 和 PUT Request 中可以包含 Body,用於傳遞數據或資源。Response 也可以包含 Body。常用格式為 JSON (application/json)
Status Code: 伺服器使用狀態碼來指示請求的結果,Status Code 有很多,詳細可以參看這裡
常用的 HTTP status code 如下:
HTTP Status Code | Description |
---|
2xx | Success (200 OK, 201 Create Success, etc…) |
3xx | Redirect (301, 302, 303) |
4xx | Client Side Error (400 Bad Request, 403 Forbidden, 404 Resource Not Found, etc…) |
5xx | Server Side Error (500 Internal Server Error, 502 Gateway Error, 504 Timeout Error) |
API (Application Programming Interface) 譯作應用程式介面 ,它允許不同的系統或應用程序通信。
像是 菜單
在餐廳提供給客戶的一個介面,用於展示食物選項和價格,它提供了一種方式來查看選項。而 API 就是提供了一種方式來訪問可用的資源和服務,允許 Client 和 Server 之間進行通信。
API 有很多種,而我們平常說的 API ,正確來說是 Web API,允許 Web 應用程序和服務之間進行通信,是通過 HTTP 協議提供的 API。
REST API 是 Web API 的一種實現方式,它符合 Web API 的基本定義,用於不同軟體系統之間的通信和互動。
REST(Representational State Transfer) 是一種設計風格,強調資源的狀態轉換和以資源為中心的設計。REST API 使用 HTTP 方法來執行操作,資源由唯一的 URI 進行識別,並使用常見的數據格式(I.e. JSON)進行數據交換。
不是所有的 Web API 都必須符合 REST 設計風格,還可以使用其他的實現方式 (I.e. SOAP API)。但目前 REST API 是主流的 Web API。
REST API 基於以下 2 個主要原則和設計規則:
GET
、POST
、PUT
和 DELETE
。/users
表示用戶資源。在沒有 REST 規範以前,URL 的 path 可能是長這樣的:
POST /create_product
POST /product_create
POST /createProduct
POST /add_product
根據 REST 規範以後會統一為
POST /product
(以 Resource 的名字設定為 Path,透過 Method 和 資源名稱就可以知道這支 API 的功能)再多看幾個例子,更好的理解 REST API:
GET /users/{usedID}
⇒ I.e. GET /users/1
,取得 usedID 為 1 的 Users 資料GET /orders/{orderID}
⇒ I.e. GET /orders/1
,取得 orderID 為 1 的 Order 資料那想取得 1 號會員的所以訂單資料要怎樣設計?
GET /users/1/orders
(可以利用多層設計標示資源)REST API 的好處是提供了 API 設計的一致性,讓團隊工作更有默契,不用每次都重新思考做決定,省點力氣用在別的地方。
是一種常用的輕量級數據格式,用於在不同的系統之間傳遞和存儲結構化數據。JSON 格式是簡單、易於閱讀和編寫的,同時也易於機器解析和生成。
跟 Python 的 Dictionary 型別相似,JSON 支持的數據類型包括字串、數字、布林值、物件、陣列和 null。它是許多編程語言中的一種通用數據格式,並且常用於 Web API 中傳遞數據。
{
"students": [{
"id": 1,
"name": "Mary"
},{
"id": 2,
"name": "Tom"
}
]
}
在 JSON 格式出現以前,較常用的是 XML 格式。
<students>
<student>
<id>1</id>
<name>Mary</name>
</student>
<student>
<id>2</id>
<name>Tom</name>
</student>
</students>
WEB API 另一種的實現方式是 SOAP API,就是主要以 XML 格式傳遞數據。但由於 XML 較為繁瑣的語法和較大的文件大小,使得它在一些情況下顯得不太適用。而 JSON 的簡潔性和易解析性,它在現代應用中更加受到歡迎。
前面有提到 HTTP 是 stateless (無狀態) Protocol,意思是每次發送請求都是獨立的,不會記錄之前做過什麼。
因此,衍生了 3 個輔助機制:
我覺得這篇文章講解 Cookies 和 Session 蠻好的,可以參看: https://hulitw.medium.com/session-and-cookie-15e47ed838bc
借來節錄重點:
Cookies 就是系統幫你記錄後資料放在 Client Side,下次來訪的時候需要帶著 Cookies 來讓系統記得你。
而 Session 就是建立以後,由系統幫你記著資訊,你拿著 session id 來訪就好了。
系統用 Cookies 和 Session 儲存的資訊,這可以透過 Browser 的 Developer Tools 看得到。
要使用 Cookies 還是 Session 來儲存資訊,會根據產品需求來作設計。
清楚知道什麼是 Web API 和 REST API 後,接下來就要來介紹 API 的測試囉。