你必須很努力

如何使用 Postman 測試 API

2022/12/31
字數統計: 1k閱讀時間: 4 min

前言

不論前後端在處理或串接 API 時,除了在瀏覽器測試外,透過 Postman 進行測試是非常地方便,這篇主要是紀錄如何使用,之後有人問時,就能請對方直接看這篇了 xd

說明

Windows 與 macOS 皆能到 Postman 官方網站下載,若不想安裝,也能使用 Postman 提供的 web 版,使用 web 版需要先註冊才能使用,介面大同小異,以下會以 macOS 操作為主

Postman 有免費版與付費版,我自己是用免費版,需求已經夠我使用,若需求比較多,免費版 Postman 已經無法滿足需求,但又不想付費時,可以考慮用 Hoppscotch (原名是 Postwoman),Hoppscotch 是開源軟體,介面操作上與 Postman 也很相似,也有提供 web 版可以操作

note: 類似替代軟體蠻多的,就不多做贅述

圖文教學

對我來說,動手做學習效果最好,以下直接提供 HTTP GET、POST 的範例,以及遇到要登入的網站時,要如何用 Postman 打 API

示範用 Postman HTTP GET - 不用登入的網站

https://echo.hoppscotch.io 為例
測試完後,點 </> icon 並選想要的程式語言範例 code (這超好用)

示範用 Postman HTTP POST - 要登入的網站

政府資料開放平臺訂閱資料集清單 為例

在 Chrome 的開發者工具 (F12) 中,透過 Network 可以觀察網站打了哪些 endpoint

示範打用 Swagger 建立的網站

簡易說明: Swagger 可用來自動產生 API 文件,蠻多提供 API 的網站是用 Swagger 建立的,看到下圖這類型風格的網站,很高機率都是用 Swagger 建立的

圖中範例的網址: 商工行政資料開放平臺 data.gcis.nat.gov.tw

這邊以 CYBERBIZ 的 API 為例,可 Google 搜尋「CYBERBIZ API」即可找到相關文件與連結

示範用 Postman HTTP GET 打 CYBERBIZ 的 API

note: 範例中的網址與相關功能,若 CYBERBIZ 有更動或失效,則不另外更新影片

示範用 Postman HTTP POST 打 CYBERBIZ 的 API

note: 範例中的網址與相關功能,若 CYBERBIZ 有更動或失效,則不另外更新影片

以下是自己寫的 Ruby Class,方便可以用 POST (GET 就不寫了 xd)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
require 'uri'
require 'net/http'
require 'digest'
require 'base64'
require 'openssl'

class CyberbizApi
attr_reader :username, :secret

URL = 'https://api.cyberbiz.co/v1/'.freeze

def initialize
@username = 'your_username'
@secret = 'your_secret'
end

def post(path, data)
send_request(:post, path, data)
end

private

def send_request(request_method, path, data)
uri = URI(URL + path)
uri.query = URI.encode_www_form(data)
http = init_http(uri)
request = build_request(request_method, uri, data)
send_request_and_return_response(http, request)
end

def init_http(uri)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'
http
end

def build_request(request_method, uri, data)
request =
case request_method
when :get
Net::HTTP::Get.new(uri.request_uri)
when :post
Net::HTTP::Post.new(uri.request_uri)
end
setting_request(request, uri, data)
end

def setting_request(request, uri, data)
request.content_type = 'application/x-www-form-urlencoded'
request['x-date'] = Time.now.gmtime.strftime('%a, %d %b %Y %T GMT')
request.body = uri.query
digest = Base64.strict_encode64(Digest::SHA256.digest(request.body))
request['digest'] = "SHA-256=#{digest}"
signature = generate_signature(request)
request["authorization"] = "hmac username=\"#{username}\", "\
"algorithm=\"hmac-sha256\", "\
"headers=\"x-date request-line digest\", "\
"signature=\"#{signature}\""
request
end

def generate_signature(request)
x_date = request.to_hash['x-date'].first
digest = request.to_hash['digest'].first
sig_str = "x-date: #{x_date}\n#{request.method} #{request.path} HTTP/1.1\ndigest: #{digest}"
sha256_digest = OpenSSL::Digest.new('sha256')
hmac_digest = OpenSSL::HMAC.digest(sha256_digest, secret, sig_str)
Base64.strict_encode64(hmac_digest)
end

def send_request_and_return_response(http, request)
response = http.request(request)
response.body
end
end

測試打「新增商品」

1
2
3
4
5
6
7
8
data = {
title: "test",
handle: "hello",
published: true,
price: 666,
tax_type_id: "inclusive_tax",
}
response = CyberbizApi.new.post('products', data)

示範用 Postman 打 LINE Notify API

可參考之前寫的這篇 用 Ruby 將訊息傳到 LINE 群組 (LINE Notify API)

若遇到需要夾帶(上傳)檔案時

Postman 有支援夾帶檔案

小結

若對 Postman 不熟建議可以看上面的 Youtube 影片範例,可以到 Youtube 的網站觀看,都已經把時間戳寫好了,全部看完不用 5 分鐘

千萬不要相信前端傳送的資料,通常後端會再次驗證資料,因為前端傳的資料能輕易被修改、自定義多傳參數到後端


medium 文章連結:https://link.medium.com/ZdX8mEXVcwb
本文同步發布於 小菜的 Blog https://riverye.com/

備註:之後文章修改更新,以個人部落格為主

原文連結:https://riverye.com/2022/12/31/How-to-Test-APIs-with-Postman/

發表日期:2022-12-31

更新日期:2023-01-01

CATALOG
  1. 1. 前言
  2. 2. 說明
  3. 3. 圖文教學
    1. 3.1. 示範用 Postman HTTP GET - 不用登入的網站
    2. 3.2. 示範用 Postman HTTP POST - 要登入的網站
    3. 3.3. 示範打用 Swagger 建立的網站
    4. 3.4. 示範用 Postman HTTP GET 打 CYBERBIZ 的 API
    5. 3.5. 示範用 Postman HTTP POST 打 CYBERBIZ 的 API
    6. 3.6. 示範用 Postman 打 LINE Notify API
    7. 3.7. 若遇到需要夾帶(上傳)檔案時
  4. 4. 小結