API需求與設計下的模型

更新於 發佈於 閱讀時間約 13 分鐘

在前一篇文章中,我們探討了程式設計下的模型(Model)與資源導向的 API 設計,今天我們將深入討論在 API 需求與設計下的模型。這部分內容對於確保 API 能夠滿足業務需求、具有良好的可維護性和擴展性至關重要。


什麼是 API 模型(需求下的)?

API 模型是 API 設計的核心,它描述了如何將系統中的業務邏輯和資料結構映射成 API 的資源和操作。API 模型不僅僅是數據的結構設計,更是使用者與系統交互的基石。通過 API 模型,我們定義了哪些資源可以被訪問、可以執行哪些操作,以及這些操作將返回什麼樣的結果。

換句話說,API 模型是 API 的「骨架」,它支持著 API 的所有功能,並確保這些功能能夠被使用者正確且一致地使用。


什麼是 API Profile?

在 API 設計中,API Profile 扮演著「設計圖」的角色,它幫助我們在設計階段確保 API 的整體結構合理且符合業務需求。API Profile 涵蓋了資源、操作、資源之間的關聯、以及使用這些資源時的約束條件。

API Profile 是 API 設計的基礎,它幫助團隊在設計早期階段建立共識,並提供一個參考框架來進行後續的詳細設計和實現。


API 建模流程

建立 API 模型是一個循序漸進的過程,需要從高層次的需求開始,逐步細化到具體的技術實現。以下是 API 建模的基本步驟,每一步都將幫助我們確保 API 的設計能夠滿足需求並具備良好的可擴展性。

1. 建立摘要

首先,我們需要明確 API 的主要目標和用途。這一步驟就像是在設計一個新產品之前,先確定它的市場定位和目標客戶群體。我們要清楚 API 的核心功能、目標使用者,以及預期的業務流程。

在這個案例中,我們將開發一個圖書管理與會員管理系統,並且處理會員借書的相關業務。這個系統的核心功能包括圖書的查詢、增加、更新、刪除,以及會員的管理和借書記錄的處理。

操作名稱說明人員資源事件操作細節

SearchBook

搜尋書籍

會員、管理者

AddBook

新增書籍

會員、管理者

UpdateBook

更新書籍

會員、管理者

DeleteBook

刪除書籍

會員、管理者

SearchMember

查詢會員

會員、管理者

AddMember

新增會員

會員、管理者

UpdateMember

更新會員

會員、管理者

MemberRentBook

會員租借書籍

會員、管理者

2. 找出相同資源

在 API 中,資源通常代表系統中的實體,比如圖書管理系統中的「圖書」、「會員」、「借閱記錄」等。我們需要明確這些資源的定義,並對它們進行詳細描述。

這一步的目的是識別出系統中哪些資源是 API 需要處理的,並確保我們不會遺漏重要的資源。例如:

  • 圖書(Book):描述圖書的基本信息,如標題、作者、ISBN 等。
  • 會員(Member):描述會員的基本信息,如姓名、會員編號、聯繫方式等。
  • 借閱記錄(Loan):描述圖書借閱的記錄信息,如借閱時間、歸還期限、借閱者信息等。

這些資源將構成 API 的基礎,我們需要對它們進行詳細設計。如下表範例所示,先找出操作名稱中的名詞來定義出相同的資源。

操作名稱說明人員資源事件操作細節

SearchBook

搜尋書籍

會員、管理者

AddBook

新增書籍

會員、管理者

UpdateBook

更新書籍

會員、管理者

DeleteBook

刪除書籍

會員、管理者

SearchMember

查詢會員

會員、管理者

AddMember

新增會員

會員、管理者

UpdateMember

更新會員

會員、管理者

MemberRentBook

會員租借書籍

會員、管理者

3. 定義資源階層

資源之間的關係和層次結構是設計 API URI 結構的基礎。定義資源的階層結構有助於使 API 更加直觀和易於理解,這樣的階層結構清楚地展示了資源之間的關係,使得 API 使用者可以輕鬆地理解和使用 API。

在表格中,我們可以進一步將資源的階層結構明確列出,並展示出每個資源之間的關聯性。例如:

操作名稱說明人員資源事件操作細節

SearchBook

搜尋書籍

會員、管理者

Book

AddBook

新增書籍

會員、管理者

Book

UpdateBook

更新書籍

會員、管理者

Book

DeleteBook

刪除書籍

會員、管理者

Book

SearchMember

查詢會員

會員、管理者

Member

AddMember

新增會員

會員、管理者

Member

UpdateMember

更新會員

會員、管理者

Member

MemberRentBook

會員租借書籍

會員、管理者

Book、Member

4. 加入操作事件

在定義完資源後,我們需要確定使用者可以對這些資源進行哪些操作。這些操作通常包括 CRUD 操作(創建、讀取、更新、刪除),以及其他業務邏輯相關的操作。

在這一步中,我們要把每一個操作事件的細節和處理流程補充完整,確保操作的完整性和一致性。比如,在這個系統中,我們需要定義圖書資源的CRUD操作、會員資源的管理操作以及借書的業務邏輯。

這些操作應該包括詳細的請求格式、參數要求和返回格式,以確保 API 使用者能夠正確地執行操作。

操作名稱說明人員資源事件操作細節

SearchBook

搜尋書籍

會員、管理者

Book

Books.Get…

AddBook

新增書籍

會員、管理者

Book

Books.Add

UpdateBook

更新書籍

會員、管理者

Book

Books.Update

DeleteBook

刪除書籍

會員、管理者

Book

Books.Delete

SearchMember

查詢會員

會員、管理者

Member

Member.Get

AddMember

新增會員

會員、管理者

Member

Member.Add

UpdateMember

更新會員

會員、管理者

Member

Member.Update

MemberRentBook

會員租借書籍

會員、管理者

Book、Member

Member.RentBook.Add.Book

5. 補充操作流程

操作流程的設計對於 API 的一致性和安全性至關重要。在這一步,我們需要對每個操作的細節進行補充,因為我們是開發Web API,所以可以使用HTTP方法來輔助操作細節的建立。同時,我們還需要考慮 API 的安全特性,確保敏感操作受到適當的保護。

先前有講到HTTP方法,這邊在複習一下:

GET:用於讀取資源,應當是安全且無副作用的。

POST:用於創建新資源,應當具備非冪等性,即多次重複執行可能導致不同結果。

PUT:用於更新現有資源,通常是冪等的,即多次執行會得到相同結果。

DELETE:用於刪除資源,應當具備冪等性。

PATCH:用於部分更新資源,和 PUT 類似但應用於局部變更。

再來是何謂安全特性:

  • Safe:(安全的),不會對資源做出狀態改變的方法。
  • Idempotent:(冪等的),一個操作會改變資源的狀態,但重複操作不會重複改變該資源得狀態。
  • UnSafe:(不安全的),一個操作會改變資源的狀態,重複操作會重複的改變資源的狀態。

最後節合在一起來看

HTTP 方法簡介與安全特性:

HTTP方法說明安全特性安全特性說明

GET

回覆請求的資料

Safe

不會改變現有資源狀態

POST

創建資源或其他應用

UnSafe

重複一樣的新增,可能會產生多比相同的資源

PUT

取代現有的資源

Idempotent

重複一樣的取代不會產生多個重複的資源

PATCH

更新資源

UnSafe

重複一樣的更新可能會讓資源有重複的屬性

DELETE

刪除資源

Idempotent

重複一樣的刪除不會改變資源已被刪除的狀態

以上這些HTTP 方法與安全特性,在Web API的篇章已經提到過一次了,現在又出現就能說明他對於Web API 的正確設計上舉足輕重,在正確的設計下,要想到他的操作細節應該是屬於何種類型,會對資料造成何種影響,這樣能夠更好的完成API模型設計。

操作名稱說明人員資源事件操作細節

SearchBook

搜尋書籍

會員、管理者

Book

Books.Search…

請求參數:BookSearch

回傳值:Book[]

safe / sync

AddBook

新增書籍

會員、管理者

Book

Books.Add

請求參數:Book

回傳值:bool

Unsafe / sync

UpdateBook

更新書籍

會員、管理者

Book

Books.Update

請求參數:Book

回傳值:Book

Idempotent / sync

DeleteBook

刪除書籍

會員、管理者

Book

Books.Delete

請求參數:Book.Id

回傳值:bool

Idempotent / sync

SearchMember

查詢會員

會員、管理者

Member

Member.Search

請求參數:MemberSearch

回傳值:Member

safe / sync

AddMember

新增會員

會員、管理者

Member

Member.Add

請求參數:Member

回傳值:bool

Unsafe / sync

UpdateMember

更新會員

會員、管理者

Member

Member.Update

請求參數:Member

回傳值:Member

Idempotent / sync

MemberRentBook

會員租借書籍

會員、管理者

Book、Member

Member.RentBook.Add

請求參數:Member,Book[]

回傳值:Book[]

Unsafe / sync


使用時序圖來驗證 API 流程

在完成上述步驟後,我們可以使用時序圖來驗證 API 的流程。時序圖是一種視覺化工具,可以幫助我們確認 API 操作流程是否合理,以及資源之間的交互是否清晰。它展示了在一個操作過程中,系統中的各個實體如何互動,並清晰地展示了操作的順序和邏輯。

例如,對於「借閱圖書」這個操作,我們可以設計一個時序圖,展示會員請求借閱圖書、系統檢查圖書可用性、創建借閱記錄,並通知會員的整個流程。這樣的時序圖能夠有效地驗證我們設計的 API 是否符合預期,並且可以幫助我們識別和解決潛在的設計問題。


總結

設計 API 模型是一個需要深思熟慮且逐步完善的過程。從建立摘要、找出資源、定義資源階層,到加入操作事件和補充操作流程,每一步都至關重要。最後,通過使用時序圖來驗證 API 流程,我們可以確保 API 的設計不僅符合業務需求,還能在實際應用中高效運行。

這些步驟不僅能幫助我們建立一個強大而靈活的 API 模型,還能確保 API 在未來的變化中保持穩定和可靠。通過良好的 API 設計,我們可以為開發者提供一個易於使用、功能強大的接口,為最終用戶帶來更好的體驗。

這就是 API 模型設計的核心理念:將複雜的業務邏輯轉化為簡單、清晰的 API,讓使用者可以輕鬆操作並獲得所需的結果。

avatar-img
0會員
12內容數
歡迎來到 ChiYu Code Journey!這裡是我分享技術心得與開發經驗的空間,主要內容涵蓋 C#、.Net、API 開發及雲端等程式主題。偶爾也會分享一些日常生活點滴,像是我與我家可愛的法鬥相處的趣事等。希望在這裡能和大家一起學習、交流,一同踏上這段程式旅程!
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
ChiYu Code Journey 的其他內容
本文探討程式設計下的API模型設計,特別是Resource-Based API的概念,強調區分「資料」與「資源」的重要性,避免直接暴露資料庫原始資料。文中介紹MVC和MVVM架構,說明如何透過模型過濾、轉換資料,保護敏感數據並提升API靈活性及可維護性。
本文討論 API 設計中界定 API 邊界的重要性,說明如何避免多合一 API 的缺點,並透過理解業務需求、識別核心資源和劃分功能責任等步驟,設計出清晰、高效且易於維護的 API。文章以圖書館管理系統為例,說明如何界定 API 邊界,並說明正確使用 HTTP 方法和狀態碼的重要性。
本文深入探討 Web API 與 HTTP 協議,解釋 HTTP 請求方法 (GET, POST, PUT, PATCH, DELETE)、HTTP 結構 (Headers, Body, 狀態碼),。透過說明各種 HTTP 狀態碼,讀者可以更深入理解 Web API 的設計與應用。
本篇文章淺顯易懂地介紹什麼是API(應用程式介面),並以生活化的例子和C#程式碼範例說明介面的概念,以及API在不同領域的應用和優勢,例如Web API、作業系統API、庫或框架API等,並點出其在社群媒體整合、支付系統、地圖服務等日常生活中的重要性。
本文探討程式設計下的API模型設計,特別是Resource-Based API的概念,強調區分「資料」與「資源」的重要性,避免直接暴露資料庫原始資料。文中介紹MVC和MVVM架構,說明如何透過模型過濾、轉換資料,保護敏感數據並提升API靈活性及可維護性。
本文討論 API 設計中界定 API 邊界的重要性,說明如何避免多合一 API 的缺點,並透過理解業務需求、識別核心資源和劃分功能責任等步驟,設計出清晰、高效且易於維護的 API。文章以圖書館管理系統為例,說明如何界定 API 邊界,並說明正確使用 HTTP 方法和狀態碼的重要性。
本文深入探討 Web API 與 HTTP 協議,解釋 HTTP 請求方法 (GET, POST, PUT, PATCH, DELETE)、HTTP 結構 (Headers, Body, 狀態碼),。透過說明各種 HTTP 狀態碼,讀者可以更深入理解 Web API 的設計與應用。
本篇文章淺顯易懂地介紹什麼是API(應用程式介面),並以生活化的例子和C#程式碼範例說明介面的概念,以及API在不同領域的應用和優勢,例如Web API、作業系統API、庫或框架API等,並點出其在社群媒體整合、支付系統、地圖服務等日常生活中的重要性。
你可能也想看
Google News 追蹤
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
Thumbnail
需求情境: 在設計畫面時,資料來源是後台的 api,每一次畫面細節的修修改改,都會觸發 Xcode Preview 程序,導致不斷呼叫後台。此時若資料結構和大小都具有一定規模,就會導致效率低落,不斷等待,且消耗伺服器資源甚鉅。 解決方案: 將後台傳回的資料以檔案形式暫存在本地端,每次 pr
※ 什麼是 RESTful API? 這種運用 HTTP 來表達語義的路由設計風格稱為 RESTful API,它描述了如何實現 Web API 的架構。所謂的 API 是應用程式介面 (application programming interface),網址也是一種應用程式的「介面」,故稱為
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
當這產品的這個 API 被呼叫,再從回傳內容的某個欄位欄位來判斷,只要“這個欄位”顯示 false 就代表不支援」,雖然這樣的設計也能滿足功能需求…
Thumbnail
有趣的是,Model 其實沒什麼嚴格的定義,所以每個人對 Model 的解讀也不盡相同,有人覺得資料怎麼儲存屬於 Model 的一部份 (受 ORM 工具的影響),有人覺得工作流程 (workflow) 是 Model 的一部份,我個人也有自己的想法,而且隨專案的規模和特性,也不是總是一樣的。
Thumbnail
先前幾篇筆記介紹了網路請求,瀏覽器儲存資料的方式,那麼實務上,前端最常需要發送網路請求的時候,就是透過呼叫 API,去向後端工程師發送/請求資料,所以今天來記錄什麼是 API吧!
Thumbnail
提到後端工程師,似乎就只是開發 API,但一個複雜的系統其實不太可能只透過 API 就能完成,例如一個簡單的功能,註冊會員,其實是由好幾個不同類型的工作互相配合,您才能收到開通信,才確保資料庫不會有一堆未開通帳號等。所以今天就來聊聊一個系統有幾種不同執行方式的工作。
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
Thumbnail
需求情境: 在設計畫面時,資料來源是後台的 api,每一次畫面細節的修修改改,都會觸發 Xcode Preview 程序,導致不斷呼叫後台。此時若資料結構和大小都具有一定規模,就會導致效率低落,不斷等待,且消耗伺服器資源甚鉅。 解決方案: 將後台傳回的資料以檔案形式暫存在本地端,每次 pr
※ 什麼是 RESTful API? 這種運用 HTTP 來表達語義的路由設計風格稱為 RESTful API,它描述了如何實現 Web API 的架構。所謂的 API 是應用程式介面 (application programming interface),網址也是一種應用程式的「介面」,故稱為
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
當這產品的這個 API 被呼叫,再從回傳內容的某個欄位欄位來判斷,只要“這個欄位”顯示 false 就代表不支援」,雖然這樣的設計也能滿足功能需求…
Thumbnail
有趣的是,Model 其實沒什麼嚴格的定義,所以每個人對 Model 的解讀也不盡相同,有人覺得資料怎麼儲存屬於 Model 的一部份 (受 ORM 工具的影響),有人覺得工作流程 (workflow) 是 Model 的一部份,我個人也有自己的想法,而且隨專案的規模和特性,也不是總是一樣的。
Thumbnail
先前幾篇筆記介紹了網路請求,瀏覽器儲存資料的方式,那麼實務上,前端最常需要發送網路請求的時候,就是透過呼叫 API,去向後端工程師發送/請求資料,所以今天來記錄什麼是 API吧!
Thumbnail
提到後端工程師,似乎就只是開發 API,但一個複雜的系統其實不太可能只透過 API 就能完成,例如一個簡單的功能,註冊會員,其實是由好幾個不同類型的工作互相配合,您才能收到開通信,才確保資料庫不會有一堆未開通帳號等。所以今天就來聊聊一個系統有幾種不同執行方式的工作。