[Lab] Postman X Trello RESTful API Startup Lab
壹、前言與聲明
- 本文為 Postman 的 Lab,使用 Trello RESTful API 作為範例
- 撰寫本文的動機在於配合 RESTful API 課程 HW1 學習 Postman 的使用
- 本文獨立於課程外,也是適合自行訓練的範例──不論您想入門的是 Postman 或 Trello RESTful API
- 本頁面使用 JS 簡化操作,藉由輸入的資料自動組出 Lab 所需要的資料,本頁面不會傳輸你的 API Key 或 Token 到後端伺服器
貳、預處理
- 在 https://trello.com 註冊並登入 Trello
- 在 https://www.postman.com/ 下載、註冊並登入 Postman
請不要使用 Chrome Plugin 的 Postman,該版本已經停止維護
參、參考資料
肆、Lab
Lab 01: 取得「API 金鑰」 與 「Token」
階段任務:取得可供 RESTful帳號授權,以備接下來的 Lab 使用
- 在 https://trello.com/power-ups/admin 登入 Power-ups Admin
- 在 https://trello.com/power-ups/admin 建立新的 Power-up圖片備份圖片備份
- 在 https://trello.com/power-ups/admin 進入新建立的 Power-up
> 進入 「API 金鑰」 分頁
> 產生新的 API 金鑰
>在這個欄位輸入 API Key:圖片備份圖片備份圖片備份 圖片備份
> 進入下一步前,請先回到上面,將得到的 API Key 輸入欄位中 - 請仔細觀察以下連結的組成
> 連結的 query 標示了此連結的行為是「請求Token」、「Token效期1天」、「Token能讀能寫」、「Token依附在指定API Key下」
> 請進入連結取得 Token :
>在這個欄位輸入 Token:圖片備份圖片備份
> 進入下一步前,請先回到上面,將得到的 token 輸入欄位中 - 進入以下連結確認 API Key, Token 運作正常
> 看到 Json 格式資料表示 API Key 與 Token 正常
> Trello RESTful API 取得 「Trello 使用者資訊」
> 以上連結利用 Query 攜帶 API Key 跟 Token 來達成授權
Lab 02: 使用 Trello RESTful API
前置作業: 設定 Postman
- 在 Postman 匯入 本 Lab 的 Collection
- 確認 Environment Variable 有啟用,不是處於 No Environment 的狀態圖片備份
- 將 API Key 與 Token 加入 Global variable 或 Environment Variable圖片備份
任務清單
- 建立看板(Board) myBoard
- 驗證狀態碼 Status Code = 200
- 驗證返回的 json 中 看板名稱 = myBoard
- 驗證返回的 json 中 closed = false
- 建立列表(List) TODO,在看板(Board) myBoard 中建立
- 驗證狀態碼 Status Code = 200
- 驗證返回的 json 中 列表名稱 = TODO
- 驗證返回的 json 中 closed = false
- 驗證返回的 json 中 列表所在看板 = myBoard
- 建立列表(List) DONE,在看板(Board) myBoard 中建立
- 驗證狀態碼 Status Code = 200
- 驗證返回的 json 中 列表名稱 = DONE
- 驗證返回的 json 中 closed = false
- 驗證返回的 json 中 列表所在看板 = myBoard
- 建立卡片(Card) Learn Postman,在列表(List) TODO 中建立
- 驗證狀態碼 Status Code = 200
- 驗證返回的 json 中 卡片名稱 = Learn Postman
- 驗證返回的 json 中 closed = false
- 驗證返回的 json 中 卡片所在列表 = TODO
- 驗證返回的 json 中 卡片所在看板 = myBoard
- 驗證返回的 json 中 卡片沒有投票 votes = false
- 驗證返回的 json 中 卡片沒有附件 attachments = false
- 移動卡片(Card) Learn Postman,由列表(List) TODO 移動到 DONE
- 驗證狀態碼 Status Code = 200
- 驗證返回的 json 中 卡片名稱 = Learn Postman
- 驗證返回的 json 中 closed = false
- 驗證返回的 json 中 卡片所在列表 = DONE
- 驗證返回的 json 中 卡片所在看板 = myBoard
- 驗證返回的 json 中 卡片沒有投票 votes = false
- 驗證返回的 json 中 卡片沒有附件 attachments = false
- 刪除卡片(Card) Learn Postman
- 驗證狀態碼 Status Code = 200
- 封存列表(List) TODO
- 驗證狀態碼 Status Code = 200
- 驗證返回的 json 中 列表名稱 = TODO
- 驗證返回的 json 中 closed = true
- 驗證返回的 json 中 列表所在看板 = myBoard
- 封存列表(List) DONE
- 驗證狀態碼 Status Code = 200
- 驗證返回的 json 中 列表名稱 = DONE
- 驗證返回的 json 中 closed = true
- 驗證返回的 json 中 列表所在看板 = myBoard
- 刪除看板(Board) myBoard
- 驗證狀態碼 Status Code = 200
- 確認看板(Board) myBoard 不存在
- 驗證狀態碼 Status Code = 200
建立看板(Board) myBoard
在 Postman 中
- 方法:POST
- 目標:
- 測試:
// Parse Json let response = pm.response.json(); // Save Response pm.environment.set("myBoard_id", response.id); // Confirm Result pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); pm.test("Board name is myBoard", function () { pm.expect(response.name).to.eql("myBoard"); }); pm.test("Board is not closed", function () { pm.expect(response.closed).is.false; }); - 說明:
- 因為是「建立」看板,所以使用 POST(建立)
- 因為是建立「看板」、所以 Path 為 boards
- 因為建立看板需要名稱,所以 Query 需攜帶新看板的名稱 myBoard
- 因為不希望看板建立時產生預設的 List 跟 Label,所以 Query 需指定關閉預設 List 跟 Label
- 因為行為需要授權,所以 Query 須包含 key 跟 token
- 執行後會得到新看板的 id,將其記錄到環境變數 myBoard_id 供後續使用
建立列表(List) TODO,在看板(Board) myBoard 中建立
在 Postman 中
- 方法:POST
- 目標:
- 測試:
// Parse Json let response = pm.response.json(); // Save Response pm.environment.set("TODO_id", response.id); // Confirm Result pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); pm.test("List name is TODO", function () { pm.expect(response.name).to.eql("TODO"); }); pm.test("List is not closed", function () { pm.expect(response.closed).is.false; }); pm.test("List is in Board myBoard", function () { pm.expect(response.idBoard).to.eql(pm.environment.get("myBoard_id")); }); - 說明:
- 因為是「建立」列表,所以使用 POST(建立)
- 因為是建立「列表」、所以 Path 為 lists
- 因為建立列表需要名稱,所以 Query 需攜帶新列表的名稱 TODO
- 因為列表層級是在看板中,所以需要提供看板 id 指定在哪個看板中建立。我們將直接帶入環境變數 myBoard_id
- 因為行為需要授權,所以 Query 須包含 key 跟 token
- 執行後會得到新列表的 id,將其記錄到環境變數 TODO_id 供後續使用
建立列表(List) DONE,在看板(Board) myBoard 中建立
在 Postman 中
- 方法:POST
- 目標:
- 測試:
// Parse Json let response = pm.response.json(); // Save Response pm.environment.set("DONE_id", response.id); // Confirm Result pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); pm.test("List name is DONE", function () { pm.expect(response.name).to.eql("DONE"); }); pm.test("List is not closed", function () { pm.expect(response.closed).is.false; }); pm.test("List is in Board myBoard", function () { pm.expect(response.idBoard).to.eql(pm.environment.get("myBoard_id")); }); - 說明:
- 因為是「建立」列表,所以使用 POST(建立)
- 因為是建立「列表」、所以 Path 為 lists
- 因為建立列表需要名稱,所以 Query 需攜帶新列表的名稱 DONE
- 因為列表層級是在看板中,所以需要提供看板 id 指定在哪個看板中建立。我們將直接帶入環境變數 myBoard_id
- 因為行為需要授權,所以 Query 須包含 key 跟 token
- 執行後會得到新列表的 id,將其記錄到環境變數 DONE_id 供後續使用
建立卡片(Card) Learn Postman,在列表(List) TODO 中建立
在 Postman 中
- 方法:POST
- 目標:
- 測試:
// Parse Json let response = pm.response.json(); // Save Response pm.environment.set("card_id", response.id); // Confirm Result pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); pm.test("Card name is Learn Postman", function () { pm.expect(response.name).to.eql("Learn Postman"); }); pm.test("List is in List TODO", function () { pm.expect(response.idList).to.eql(pm.environment.get("TODO_id")); }); pm.test("List is in Board myBoard", function () { pm.expect(response.idBoard).to.eql(pm.environment.get("myBoard_id")); }); pm.test("Card is not closed", function () { pm.expect(response.closed).is.false; }); pm.test("Card have no votes", function () { pm.expect(response.badges.votes).to.eql(0); }); pm.test("Card have no attachments", function () { pm.expect(response.badges.attachments).to.eql(0); }); - 說明:
- 因為是「建立」卡片,所以使用 POST(建立)
- 因為是建立「卡片」、所以 Path 為 cards
- 因為建立卡片需要名稱,所以 Query 需攜帶新列表的名稱 Learn Postman
- 因為卡片層級是在清單中,所以需要提供清單 id 指定在哪個清單中建立。我們將直接帶入環境變數 TODO_id
- 因為行為需要授權,所以 Query 須包含 key 跟 token
- 執行後會得到新列表的 id,將其記錄到環境變數 card_id 供後續使用
移動卡片(Card) Learn Postman,由列表(List) TODO 移動到 DONE
在 Postman 中
- 方法:PUT
- 目標:
- 測試:
// Parse Json let response = pm.response.json(); // Confirm Result pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); pm.test("Card name is Learn Postman", function () { pm.expect(response.name).to.eql("Learn Postman"); }); pm.test("List is in List DONE", function () { pm.expect(response.idList).to.eql(pm.environment.get("DONE_id")); }); pm.test("List is in Board myBoard", function () { pm.expect(response.idBoard).to.eql(pm.environment.get("myBoard_id")); }); pm.test("Card is not closed", function () { pm.expect(response.closed).is.false; }); pm.test("Card have no votes", function () { pm.expect(response.badges.votes).to.eql(0); }); pm.test("Card have no attachments", function () { pm.expect(response.badges.attachments).to.eql(0); }); - 說明:
- 因為是「移動」卡片,所以使用 PUT(修改)
- 因為是移動「卡片」、所以 Path 為 cards,以卡片 id 為標的。我們將直接帶入環境變數 card_id
- 因為移動卡片需要指定目標清單,所以 Query 需要指定目標的清單 id。我們將直接帶入環境變數 DONE_id
- 因為行為需要授權,所以 Query 須包含 key 跟 token
刪除卡片(Card) Learn Postman
在 Postman 中
- 方法:DEL
- 目標:
- 測試:
// Parse Json let response = pm.response.json(); // Confirm Result pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); pm.test("limits is empty", function () { pm.expect(response.limits).is.empty; }); - 說明:
- 因為是「刪除」卡片,所以使用 DEL(刪除)
- 因為是刪除「卡片」、所以 Path 為 cards,以卡片 id 為標的。我們將直接帶入環境變數 card_id
- 因為行為需要授權,所以 Query 須包含 key 跟 token
封存列表(List) TODO
在 Postman 中
- 方法:PUT
- 目標:
- 測試:
// Parse Json let response = pm.response.json(); // Confirm Result pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); pm.test("List name is TODO", function () { pm.expect(response.name).to.eql("TODO"); }); pm.test("List is closed", function () { pm.expect(response.closed).is.true; }); pm.test("List is in Board myBoard", function () { pm.expect(response.idBoard).to.eql(pm.environment.get("myBoard_id")); }); - 說明:
- 因為沒有提供刪除清單的 API,因此只進行封存清單
- 因為是「封存」清單,所以使用 PUT(修改)
- 因為是封存「清單」、所以 Path 為 lists,以清單 id 為標的,附加封存行為 closed。我們將直接帶入環境變數 TODO_id
- 因為 Trello 將清單的封存狀態(封存/解封)整合為一個 API,所以 Query 需要指定目標的封存狀態
- 因為行為需要授權,所以 Query 須包含 key 跟 token
封存列表(List) DONE
在 Postman 中
- 方法:PUT
- 目標:
- 測試:
// Parse Json let response = pm.response.json(); // Confirm Result pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); pm.test("List name is DONE", function () { pm.expect(response.name).to.eql("DONE"); }); pm.test("List is closed", function () { pm.expect(response.closed).is.true; }); pm.test("List is in Board myBoard", function () { pm.expect(response.idBoard).to.eql(pm.environment.get("myBoard_id")); }); - 說明:
- 因為沒有提供刪除清單的 API,因此只進行封存清單
- 因為是「封存」清單,所以使用 PUT(修改)
- 因為是封存「清單」、所以 Path 為 lists,以清單 id 為標的,附加封存行為 closed。我們將直接帶入環境變數 DONE_id
- 因為 Trello 將清單的封存狀態(封存/解封)整合為一個 API,所以 Query 需要指定目標的封存狀態
- 因為行為需要授權,所以 Query 須包含 key 跟 token
刪除看板(Board) myBoard
在 Postman 中
- 方法:DEL
- 目標:
- 測試:
// Parse Json let response = pm.response.json(); // Confirm Result pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); pm.test("Value is null", function () { pm.expect(response._value).is.null; }); - 說明:
- 因為是「刪除」看板,所以使用 DEL(刪除)
- 因為是刪除「看板」、所以 Path 為 boards,以看板 id 為標的。我們將直接帶入環境變數 myBoard_id
- 因為行為需要授權,所以 Query 須包含 key 跟 token












留言
張貼留言