建構 Postman Clone:API 調用的類庫設計
API在現代應用程式開發中至關重要,擁有正確的工具來測試和與之互動是關鍵。 Tim Corey 的影片"Class Library Design: Building a Postman Clone"逐步帶我們構建一個桌面版的 Postman 克隆工具。
在本文中,我們將探討如何透過深入了解 Tim Corey 在影片中展示的詳細方法來構建一個 Postman 克隆工具。 Tim 逐步帶我們創建支撐我們應用程式中 API 呼叫的類別庫。 最後,我們將擁有我們 Postman 克隆工具的工作 MVP(最低可行產品)版本。
這一過程對初學者友好,但同時也展示了對於想要創建自己的 Postman 或類似應用程式的開發者而言非常有價值的關鍵編程原則。 讓我們更深入探索這個過程。
介紹和設置
Tim 開始時解釋了這一課程的目標:創建商業邏輯和數據存取層以使 API 呼叫能在應用程式中運行。 他強調這是一個 MVP——一個可以稍後擴展的功能版本。
在深入編碼之前,Tim 指出該課程的設計旨在適合作品集,儘管他警告不要直接複製該項目。 相反,他鼓勵開發者將其用作靈感,創建出能夠展示 C#、API 互動和 UI 設計技能的獨特項目。
創建 API 訪問類
Tim 帶我們打開類別庫並從全新開始。 他刪除了預設的 Class1,並創建了一個名為 APIAccess 的新類。 這將負責所有 API 互動。
他解釋了他的方法設計:從公開的 void 方法開始,添加如 string 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
為了示範,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 展示了如何為 POST、PATCH、PUT 及 DELETE 等其他 HTTP 動作進行規劃。 他創建了一個名為 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 = "Invalid 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);
}
通過針對介面而不是具體類編碼,開發者可以在測試中替換實現,或在不改變 UI 或其他依賴代碼的情況下升級 API 邏輯。 Tim 強調儘管對 MVP 來說稍顯多餘,但對未來應用程序的增強非常有價值。
測試和運行應用程序
所有部分準備就緒後,Tim 在 Windows 上運行應用程序,粘貼 JSON Placeholder URL 並成功顯示格式化的 JSON 回應。 他展示了無效 URL 如何被正確拒絕,確保應用程序即使面對用戶輸入錯誤也能夠穩健運行。
這形成了一個功能齊全的 Postman 克隆工具,能夠進行 GET 請求、驗證輸入並以用戶友好的格式顯示回應。
下一步:作品集和 GitHub 整合
Tim 以強調將此項目轉變為適合作品集的項目重要性結束這一課程。 他建議:
-
為項目創建一個 GitHub 儲存庫。
-
添加一個清晰的 README,解釋應用程序。
-
包含一個可下載的執行檔,供他人測試。
-
以截圖或 GIF 突出顯示 UI 和功能。
- 記錄過程、設置和代碼結構。
他警告不要簡單地複製他的代碼並上傳作為自己的作品。 相反,開發者應該利用這些課程創建自己的 Postman 克隆工具或其他類似的應用程序,以反映個人的風格和技能集。
遵循這種方法,開發者不僅展示了編程熟練程度,還展現了探索、更新和維護軟件項目的能力,這對於潛在的雇主來說是無價的。
結論
Tim Corey 的視頻提供了從零開始構建 Postman 克隆工具的全面指南。 從設置類別庫到處理 API 呼叫、格式化 JSON 回應、驗證輸入,以及使用接口和依賴注入為未來的增強功能準備項目,此課程涵蓋了完整的應用程序開發過程。
通過遵循這種方法,開發者可以使用純 C# 創建一個 MVP Postman 克隆工具,整合 UI 元素以顯示回應 HTML 或 JSON,並準備一個可供展示的作品集中的 GitHub 項目。 這個逐步的方法不僅教授代碼,還強調計劃、過程和設計思維,這是專業軟件開發者的關鍵技能。
