構建 Postman 克隆:API 調用的類庫設計
[[academy-video-youtube({"vid": "I-txkRVEJrA", "start_time": "0", "title": "Class Library Design: Building a Postman Clone Course", "creator": "Tim Corey", "length": "47m 58s"})]]
API 是現代應用程式開發的核心,擁有正確的工具來測試和互動是至關重要的。 Tim Corey 的影片 "Class Library Design: Building a Postman Clone" 逐步帶領我們建立基於桌面的 Postman 克隆。
在這篇文章中,我們將探索如何透過深入研究 Tim Corey 在其影片中展示的詳細方法來建立一個 Postman 克隆。 Tim 帶著我們一步步地建立一個類程式庫,以促成應用程式中的 API 呼叫。 到最後,我們將擁有一個運行中的 MVP(最小可行產品)版本的 Postman 克隆。
這個過程對初學者友好,但也展示了對於希望建立自己 Postman 或類似應用的開發者來說有價值的關鍵程式設計原則。 讓我們深入了解這個過程。
引言和設置
Tim 開始解釋本課的目標:建立業務邏輯和資料存取層以使 API 呼叫能在應用程式中運行。 他強調這是一個 MVP——一個功能性版本,可以在以後擴展。
在深入程式碼之前,Tim 提到課程設計是讓作品集友好的,但他警告不要直接複製專案。 相反,他鼓勵開發者將其用作靈感,建立獨特的專案,以展示 C#、API 互動和使用者介面設計的技能。
建立 API 存取類
Tim 帶著我們打開類程式庫並從一張白紙開始。 他刪除預設的 Class1 並建立一個名為 APIAccess 的新類。 這將處理所有 API 互動。
他解釋他的方法設計方式:從 public void 方法開始,新增如字串 url 等參數,然後逐步將它們細化成可以處理真實世界 API 請求的異步任務。
public class APIAccess
{
private readonly HttpClient client = new();
public async Task<string> CallApiAsync(string url)
{
var response = await client.GetAsync(url);
if (response.IsSuccessStatusCode)
{
return await response.Content.ReadAsStringAsync();
}
return $"error: {response.StatusCode}";
}
}Tim 強調建立一個單一的 HTTP 客戸端實例,以避免每次呼叫時重新初始化,這會改善性能。
處理 API 響應
一旦 HTTP 客戶端就位,Tim 展示如何從 API 呼叫中檢索響應。 他指出除了事件處理程式,返回 Task<string> 而不是 async void 的重要性。
為了演示,Tim 使用 JSON Placeholder 提供的樣本 API,該 API 提供了如貼文、評論和待辦事項等假資料。 他將 API URL 貼到 UI 表單 HTML 中,並用 results.Text 欄位顯示響應 HTML 或 JSON。
results.Text = await api.CallApiAsync(apiText.Text);Tim 注意到原始 JSON 輸出是計算機可讀的但對使用者不友好,這引出了下一步:格式化 JSON。
格式化 JSON 輸出
Tim 展示如何使用 JsonSerializer 使響應的 JSON 更易讀:
var jsonElement = JsonSerializer.Deserialize<JsonElement>(responseJson);
var prettyJson = JsonSerializer.Serialize(jsonElement, new JsonSerializerOptions { WriteIndented = true });這讓開發者能在 UI 中顯示 美觀的 JSON,這在 JSON 文字編輯器中或測試端點時更易讀。 Tim 還新增了一個選擇,可在 原始 和 格式化輸出 之間切換,提供靈活性,無論資料是要在 UI 中 顯示 還是程式處理。
未來增強功能的規劃
儘管 MVP 僅支持 GET 請求,但 Tim 演示如何為其他 HTTP 動作如 POST、PATCH、PUT 和 DELETE 進行規劃。 他建立了一個叫做 HTTPAction 的 enum,預設值是 GET,為程式碼進行擴展而不重寫現有方法做好準備。
public enum HTTPAction
{
GET
}這種前瞻性的設計是一個很棒的實踐,適合希望構建可維護和擴展的 Postman 克隆的開發者。
URL 驗證
Tim 引入了一個 URL 驗證方法,以確保使用者只提供有效的 HTTPS 端點:
public bool IsValidURL(string url)
{
if (string.IsNullOrWhiteSpace(url)) return false;
return Uri.TryCreate(url, UriKind.Absolute, out Uri uriResult) && uriResult.Scheme == Uri.UriSchemeHttps;
}他解釋不要信任使用者輸入,並在需要時多次驗證輸入的重要性。 這確保應用程式不會因為無效的 URL 而崩潰,並防止錯誤資訊打斷工作流程。
將 API 存取與 UI 整合
一旦驗證就緒,Tim 展示如何將 API 存取與儀錶板UI整合:
實例化 APIAccess 類。
驗證 URL。
在結果文字編輯器中顯示響應 JSON。
- 對於無效的或失敗的請求顯示有意義的錯誤資訊。
if (!api.IsValidURL(apiText.Text))
{
systemStatus.Text = "無效的 URL";
results.Text = string.Empty;
return;
}
results.Text = await api.CallApiAsync(apiText.Text);Tim 強調乾淨的 UI 設計的重要性,在每個請求開始時結果區域為空,並根據成功或失敗更新系統狀態。
使用接口進行依賴注入和單元測試
Tim 介紹 IAPIAccess,APIAccess 的接口。 這是單元測試和為依賴注入準備程式碼的最佳實踐:
public interface IAPIAccess
{
Task<string> CallApiAsync(string url);
bool IsValidURL(string url);
}通過對接口而不是具體類進行編碼,開發者可以替換實現以進行測試或升級 API 邏輯,而不更改 UI 或其他依賴程式碼。 Tim 強調雖然這對 MVP 來說有點過度,但對於未來應用程式的增強是有價值的。
測試和運行應用程式
所有部件就位後,Tim 在 Windows 上運行應用程式,貼上 JSON Placeholder URL,成功顯示格式化的 JSON 響應。 他展示了如何正確拒绝無效的 URL,確保應用在使用者輸入錯誤時仍然穩健成。
這構成了一個可運行的 Postman 克隆,能進行 GET 請求、驗證輸入,並以使用者友好格式顯示響應。
接下來的步驟:作品集和 GitHub 整合
Tim 結束課程時強調將該專案變為作品集準備好的項目的重要性。 他建議:
為專案建立一個 GitHub 儲庫。
新增一個説明應用程式的清晰 README。
包含可下載的可執行文件,方便他人測試。
在截圖或 GIF 中強調顯示UI和功能。
- 記錄過程、設置和程式碼結構。
他警告不要簡單地複製他的程式碼並將其上傳作為您的作品。 相反,開發者應使用這些課程建立自己的 Postman 克隆或反映個人風格和技能組的類似應用。
通過採用這種方法,開發者不僅展示編碼能力,也顯示探索、更新和維護軟體專案的能力,這對潛在雇主是無價的。
結論
Tim Corey 的 影片提供了一份從零開始建立 Postman 克隆的全面指南。 從設置 class library 到處理 API 調用、格式化 JSON 響應、驗證輸入,並用接口和依賴注入為未來增強功能做好準備,這堂課涵蓋了完整的應用程式開發過程。
通過採用這種方法,開發者可以使用純 C# 建立 MVP Postman 克隆,整合 UI 元件以顯示響應 HTML 或 JSON,並準備 GitHub 專案以便在作品集中展示。 這種逐步的方法不僅教授程式碼,還強調規劃、過程和設計思維,這對於專業軟體開發者來說是至關重要的技能。

