iT邦幫忙

2026 iThome 鐵人賽

DAY 23
1

Day22_即使是 AI,還是要提供文件才能完成串接

前言

Day21 讓前端與後端兩個 Session 分頭完成第一版程式。Vue 前端已經能操作畫面,ASP.NET Core Web API 也能處理資料與權限,但兩邊各自執行成功,不代表接在一起就會成功。

可以把前端和後端想成兩段準備接在一起的水管。兩邊都有開口,看起來也都能通水,但接頭的尺寸、螺紋與方向只要有一項不同,硬接只會漏水。API 文件就是接頭的規格表:路徑是接頭位置,Request 是前端送出的資料,Response 是後端回傳的資料,HTTP 狀態碼則告訴前端這次成功、資料有誤,還是沒有權限。

IBM 將 API Integration 說明為透過 API 連接應用程式、系統與工作流程,讓彼此交換資料與服務。放到這個專案裡,就是把仍在使用 Mock 資料的 Vue 前端,改成呼叫真正的 ASP.NET Core API。

這一篇不會一開始就叫 Codex 修改程式。我會先讓前端與後端各自整理文件,再開啟規劃模式比對兩邊的契約。遇到沒有答案的地方就停下來問,不讓 Agent 自己猜。

先讓兩邊交出自己的說明書

前端與後端需要的文件不完全相同。前端比較在意畫面會呼叫哪些 API、資料要怎麼送,以及錯誤發生時該怎麼顯示;後端除了 API,還要說明資料表、權限、交易與並行控制。

不過,文件名稱寫得很完整,不代表內容一定正確。文件必須根據目前的程式碼與實際 API 產生,完成後還要回頭核對。否則很容易拿著一份過期地圖找新地址。

前端文件

我先回到 Day21 的前端 Session,請 Codex 根據目前的 Vue 專案整理 docs 與 README.md,以下是我的Prompt:

請幫我產生 `docs` 得資料夾底下,產生以下文件內容:
1. ApiList.md (API 清單)         
2. Architecture.md (架構圖 Diagram Level3)
3. BackendContract.md (後端/API 契約)
並且幫我為這個專案,產生一個README.md的檔案,如果已經存在且程式碼有變動,請再根據現在專案的程式碼,幫我更新README.md

https://ithelp.ithome.com.tw/upload/images/20260921/20126487oKt5Nv63W4.png

這三份文件各自回答不同問題:

  • ApiList.md:前端目前呼叫哪些路徑、使用什麼 HTTP 方法,以及可能收到哪些狀態碼。
  • Architecture.md:畫面、Store、Service Interface、HTTP Adapter 與後端之間怎麼分工。
  • BackendContract.md:前端真正依賴的欄位、型別、分頁格式、錯誤格式與驗證流程。

README.md 則負責讓剛加入專案的人知道怎麼安裝、啟動與驗證。它和 API 契約用途不同,不要把所有細節都塞進同一份檔案。

後端文件

接著切到後端 Session,請 Codex 從 Controller、DTO、EF Core Migration 與目前的設定整理文件,以下是我的Prompt:

請幫我產生 `docs` 得資料夾底下,產生以下文件內容:
1. ApiList.md (API 清單)         
2. Architecture.md (架構圖 Diagram Level3)
3. TableSchema.md   (資料庫)
4. E-R\_Diagram.md(E-R 圖)      
5. FrontendContract.md (前端/API 契約)
並且幫我為這個專案,產生一個README.md的檔案,如果已經存在且程式碼有變動,請再根據現在專案的程式碼,幫我更新README.md

https://ithelp.ithome.com.tw/upload/images/20260921/20126487l22UrZg0ui.png

後端文件多了 TableSchema.md 與 E-R_Diagram.md,因為資料如何保存、哪些欄位不能重複,以及資料表之間怎麼關聯,都是後端實作的一部分。前端不需要知道每個 Index,卻需要知道哪些操作可能因為資料衝突而收到 409 Conflict。

串接前,先認識幾個契約術語

這裡說的「契約」不是要簽名蓋章的合約,而是前端與後端共同遵守的溝通格式。API 路徑、HTTP 方法、Request、Response、驗證方式與錯誤狀態,都屬於 API Contract 的一部分。

在 API 串接的相關資料中,常會看到以下幾個名詞:

名詞 白話說明
API Integration 讓兩個原本分開的應用程式透過 API 交換資料與功能。這一篇做的,就是把 Vue 前端接到 ASP.NET Core 後端。
API Contract 前後端共同遵守的介面規則。它會寫清楚請求送到哪裡、要帶什麼資料,以及成功或失敗時會收到什麼。
Contract-first 先把 API 契約談好,再讓前端與後端各自開發。前端可以先按照契約製作 Mock,不必等後端完成。
Mock 依照預定契約做出的模擬版本。它能讓前端先完成畫面與操作,但不能證明正式後端已經接得上。
Server-first 先完成後端 API,再從實際程式產生或整理 OpenAPI 文件。文件比較貼近現況,但仍要檢查產生出來的介面是否容易理解與使用。

OpenAPI Initiative 另外提到 Legacy API,也就是替已經存在、甚至已經上線的 API 補上標準化契約,讓其他程式比較容易理解與呼叫。

本系列不是完全照著單一方式走。Day12 先整理 API 契約,Day21 讓前端按照契約製作 Mock,這一段接近 Contract-first;後端完成後,Day22 又從 Controller、DTO 與 OpenAPI 回頭核對實際介面,這部分則帶有 Server-first 的做法。簡單來說,就是先用契約分工,再用真正寫出來的程式校正契約。

API 文件不是兩份都寫了就算一致

OpenAPI Initiative 提到,前後端可以先同意一份 API 契約,再各自並行開發;前端也能依照契約建立 Mock。這個專案前一階段確實用了 Mock,但實作完成後仍要重新比對,因為程式在開發過程中可能已經改變。

這次的文件比對發現,前端仍保留早期的「建議 API」與 Mock 假設,後端文件則描述已經實作的 /api/v1 契約。這時不能因為兩邊都有 ApiList.md,就假設內容相同。

我會先檢查這幾類差異:

檢查項目 容易發生的問題 這個專案的例子
API 路徑與方法 路徑相似,但 Method 不同 GET、POST、PUT、PATCH 是否對得上
欄位名稱與型別 前端送字串,後端等待 GUID projectId、taskId、roleId
驗證方式 登入成功,後續請求卻一直 401 記憶體中的 Access Token 與 HttpOnly Refresh Cookie
安全檢查 前端漏送必要的 Header Auth POST 需要 CSRF Token
錯誤格式 後端已說明原因,前端只顯示「發生錯誤」 Problem Details 與欄位驗證訊息
並行修改 後寫入的人蓋掉先前修改 Base64 格式的 rowVersion 與 409 Conflict
權限 畫面藏起按鈕就以為安全 前端控制顯示,後端仍要逐次授權

這張表不是要初學者一次記住所有名詞。先抓住一個原則:只要前端送出的內容和後端等待的內容不同,就要先決定共同規則,再改程式。

讓全端 Session 先比對,不要立刻動工

文件準備好後,我回到 Day21 預留的全端調整 Session,開啟規劃模式並輸入:

請先讀取以下兩個專案的`docs`資料夾底下的文件,之後進行前後端網頁的串接,如果有不合理的地方請提出給我確認後再繼續
ProjectManagementWeb_Backend
ProjectManagementWeb_FrontEnd

這段 Prompt 最重要的不是資料夾名稱,而是「先唯讀盤點」和「有衝突先問」。如果直接說「幫我完成串接」,Agent 可能為了讓程式跑起來,默默選擇其中一邊。程式也許能執行,規則卻已經被改掉。

Codex 找到問題時,人要做決定

比對過程中,Codex 找到幾個文件沒有說清楚的地方,例如資料由哪一端產生、狀態如何變更,以及權限要怎麼處理。這些都會影響實際操作,不能讓 Agent 自己選一個看起來合理的答案。

以下畫面就是其中一個例子。管理員同時修改角色與帳號啟用狀態時,可以拆成兩支 API,也可以由一支 API 一次處理。兩種方式都能寫成程式,實際採用哪一種,仍要回到系統規則確認。

https://ithelp.ithome.com.tw/upload/images/20260921/20126487MgSj8Jui2J.png

我確認完規則後,Codex 才把結果放進串接計畫。這樣做多花了一點討論時間,卻能避免前後端各自理解,做到一半才回頭修改。

確認完規則,再看串接計畫

問題回答完後,Codex 才整理出完整計畫:以前端現有的 Service Interface 為邊界,把 Mock Adapter 換成正式 HTTP Adapter;後端補齊已確認的契約;兩邊共同處理 CSRF、JWT Refresh、rowVersion、權限與錯誤格式。

https://ithelp.ithome.com.tw/upload/images/20260921/20126487j5G8QnCHag.png

看到計畫後,我會再檢查四件事:

  1. 修改範圍是否只落在前端與後端,沒有順手改掉原始規格。
  2. 後端是否仍是權限與資料規則的最後一道防線。
  3. 前端是否保留既有分層,而不是把 fetch 散落在每個 Vue 元件裡。
  4. 驗證是否包含前端、後端與實際 SQL Server,而不是只有 build 成功。

確認計畫後,才讓 Codex 開始實作。

實作完成,不等於可以直接交付

這次串接完成後,Codex 回報後端 build、單元測試、SQL Server 整合測試,以及前端格式檢查、型別檢查、單元測試、production build 與 Playwright 測試結果。它也保留一項未驗證的邊界:真正寄送 Email 仍需要有效的 SMTP 設定。

https://ithelp.ithome.com.tw/upload/images/20260921/201264873ToPKKBiJV.png

這裡要分清楚三句話:

  • build 通過:程式可以編譯或打包。
  • 自動化測試通過:已寫進測試的情境得到預期結果。
  • 使用者可以順利操作:還要真的啟動系統,用瀏覽器走過流程才知道。

前兩項都很重要,但不能替第三項作保證。測試沒有寫到的操作、文案看不懂、按鈕位置不合理,或外部 Email 沒有真的寄出,都可能等到手動操作時才被發現。這正好會接到 Day23。

最後再建立 Git 存檔點

確認變更範圍、測試結果與秘密檔案後,我才請 Codex 替兩個 Repository 分別建立 commit 並 push,以下是我的Prompt:

[@GitHub](plugin://github@openai-curated-remote)
請先檢查兩個 Repository 的 git status、git diff、目前分支與待提交檔案,
確認沒有 .env、Token、密碼或其他敏感資料後,分別建立 Commit。

Commit message 使用「串接 V1 完成」,並 push 到目前追蹤的遠端分支。
完成後請回報兩個 Repository 的本機 Commit SHA 與遠端 SHA。

commit 與 push 是兩個動作。前者把版本保存在本機,後者才把版本送到遠端。要求回報 SHA,是為了確認「已經 push」不是一句沒有核對的完成訊息。

小結

前後端串接不是把 Mock URL 換成正式 URL 就結束。兩邊還要對齊路徑、欄位、驗證、權限、錯誤格式與資料版本。文件讓這些差異能被看見,規劃模式則提供一個在修改程式前停下來問問題的機會。

這次 Codex 負責讀文件、找差異、整理選項與執行修改;人負責決定業務規則、確認計畫,以及判斷哪些測試證據足夠。Agent 可以很快接管線,但接頭規格仍要有人拍板。

下一篇會真的啟動前端、後端與資料庫,從使用者角度操作系統。因為「Agent 說測過了」和「使用者真的能完成工作」,中間還隔著一輪手動測試。

參考資料

  1. IBM:What is API integration?
  2. OpenAPI Initiative:Three common scenarios for leveraging the OpenAPI Specification

上一篇
Day21_架構都想好了,我們可以開始叫 Agent 上工了
下一篇
Day23_用 User Story 產生 Test Case,再把案例變成自動化測試
系列文
Codex的規格驅動開發 :30 天打造 .NET 內部專案管理系統 共 31 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言