系統架構系列 - 6: 軟體工程文件

閱讀時間約 1 分鐘

這次我們來介紹一個在軟體工程中相對容易被忽略,但其實在多人協作中很重要的環節——「文件」。軟體的文件有很多種類,例如 API 文件、UML文件。

API 文件

近幾年軟體快速更迭,使得 API 的內容(如參數或回傳類別)時常更改,因此API 文件應與程式碼一同納入版本控制機制。在可以納入版本控制的前提下,YAML 和 Markdown 成為大多數人的選擇。

YAML & Swagger

YAML(YAML Ain't Markup Language)是一種人類可讀的資料序列化格式,與 JSON 類似,都是透過標準化格式進行配置與資料交換。由於 YAML 支援多種資料類型,因此在 Docker、Kubernetes 等領域被廣泛應用。

在 API 文件方面,我們普遍使用 Swagger 工具(現已更名為 OpenAPI Specification)來協助閱讀 YAML 檔案的內容[註1]。可以在線上使用 Swagger 的網站:Swagger Editor

Markdown

Markdown 是許多軟體工程師熟悉的工具,畢竟每個專案(應該)都有 README 文件,而這份文件通常是用 Markdown 撰寫的。除了基本的標題、粗體、列表等格式外,Markdown 還能製作表格,甚至可以用來繪製流程圖。範例如下:

```mermaid
flowchart LR
A --> B
```

其他更詳細的資訊請參考:Mermaid User Guide | Mermaid

UML 文件

UML(Unified Modeling Language)是一種標準化建模語言,旨在幫助不同專案和部門的人員在開發過程中協作。UML 包含多種類型的圖表,例如狀態圖、時序圖等。

舉例來說,當開發 API 時,為了確認從使用者開始使用到接收回覆的整個流程,可以使用時序圖來確認每個步驟的 if-else 判定以及大約所需的時間等細節,這樣可以幫助開發人員和 PM 更好地了解整個流程。

對我個人而言,我非常喜歡使用 PlantUML 這個工具來繪製 UML 圖。PlantUML 本身是一個開源工具,使用的文字語法相對簡單,並且支援多種圖表類型,這在實務上非常方便。

[註1] 在一般軟體開發流程中,我們可以直接在 CI/CD 步驟中使用 Redocly 套件,將各個 API 的 YAML 檔案統整成一個文件。

參考資料

  1. https://zh.wikipedia.org/zh-tw/YAML
  2. https://aws.amazon.com/tw/compare/the-difference-between-yaml-and-json/
  3. https://editor.swagger.io/
  4. https://github.com/Redocly/redoc
  5. https://mermaid.js.org/intro/getting-started.html
  6. https://zh.wikipedia.org/zh-tw/统一建模语言
  7. https://ithelp.ithome.com.tw/articles/10261018
  8. https://plantuml.com/zh/
avatar-img
2會員
21內容數
test
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
林柏宇的沙龍 的其他內容
本文介紹了代理伺服器的重要性及其主要功能,包括請求轉發、響應回傳、隱私保護、內容過濾等。此外,本文還探討了各類型的代理伺服器,如正向代理、反向代理、透明代理和高匿名代理,以及它們在網路架構中的角色。瞭解這些概念不僅能增進對網路安全的認識,還能在選擇合適的解決方案時提供幫助。
在資料分析中,資料處理和可視化是不可或缺的兩項重要任務。本文介紹了 ELK 系統(包括 Elasticsearch、Logstash 和 Kibana)以及 Grafana 的核心功能及其在日誌管理和資料分析中的作用,幫助讀者理解這些工具如何提升資料處理效率和可視化效果,從而更好地應用於真實場景中。
在系統架構領域,高併發、高可用及高性能是不可或缺的概念。高併發涉及系統在短時間內處理大量請求的能力;高可用性關注系統在故障情況下的持續運作能力;而高性能則關注系統快速處理任務、資源利用率高和低延遲的表現,並針對每個概念提供具體的實現方式及最佳實踐,幫助讀者瞭解如何在實務中提升系統的整體效能。
本文探討微服務架構的設計理念,包括如何解耦服務之間的依賴性,以及其在臺灣企業推行的現狀與優點。微服務架構能夠提高系統的擴展性和容錯性,解決高耦合問題,特別適合快速迭代的開發環境。文章還提供瞭解耦的實用建議,幫助開發團隊維護和測試微服務,使系統更加模組化、靈活且可維護。
在這篇文章中,我們深入探討系統架構的不同層面,尤其關注於軟體層面。文章介紹了幾種常見的架構模式,包括一體化架構、微服務架構、事件驅動架構、服務導向架構及無服務架構,並討論了其優缺點。此外,我們還探討了技術選型與性能優化的重要性,並提供實用的建議,幫助讀者在未來的軟體開發中做出更明智的選擇。
本文彙整了一些關於 SQL 效能優化的技巧,提供讀者更快的資料處理方案。包括如何清空資料表、獲取最新資料、總和資料時的可能問題以及評估 SQL 語句效能的方法。通過合理的指令使用,能夠大幅提升查詢效率並降低錯誤發生的機率。適合資料庫管理者和程式開發者作為參考。
本文介紹了代理伺服器的重要性及其主要功能,包括請求轉發、響應回傳、隱私保護、內容過濾等。此外,本文還探討了各類型的代理伺服器,如正向代理、反向代理、透明代理和高匿名代理,以及它們在網路架構中的角色。瞭解這些概念不僅能增進對網路安全的認識,還能在選擇合適的解決方案時提供幫助。
在資料分析中,資料處理和可視化是不可或缺的兩項重要任務。本文介紹了 ELK 系統(包括 Elasticsearch、Logstash 和 Kibana)以及 Grafana 的核心功能及其在日誌管理和資料分析中的作用,幫助讀者理解這些工具如何提升資料處理效率和可視化效果,從而更好地應用於真實場景中。
在系統架構領域,高併發、高可用及高性能是不可或缺的概念。高併發涉及系統在短時間內處理大量請求的能力;高可用性關注系統在故障情況下的持續運作能力;而高性能則關注系統快速處理任務、資源利用率高和低延遲的表現,並針對每個概念提供具體的實現方式及最佳實踐,幫助讀者瞭解如何在實務中提升系統的整體效能。
本文探討微服務架構的設計理念,包括如何解耦服務之間的依賴性,以及其在臺灣企業推行的現狀與優點。微服務架構能夠提高系統的擴展性和容錯性,解決高耦合問題,特別適合快速迭代的開發環境。文章還提供瞭解耦的實用建議,幫助開發團隊維護和測試微服務,使系統更加模組化、靈活且可維護。
在這篇文章中,我們深入探討系統架構的不同層面,尤其關注於軟體層面。文章介紹了幾種常見的架構模式,包括一體化架構、微服務架構、事件驅動架構、服務導向架構及無服務架構,並討論了其優缺點。此外,我們還探討了技術選型與性能優化的重要性,並提供實用的建議,幫助讀者在未來的軟體開發中做出更明智的選擇。
本文彙整了一些關於 SQL 效能優化的技巧,提供讀者更快的資料處理方案。包括如何清空資料表、獲取最新資料、總和資料時的可能問題以及評估 SQL 語句效能的方法。通過合理的指令使用,能夠大幅提升查詢效率並降低錯誤發生的機率。適合資料庫管理者和程式開發者作為參考。
你可能也想看
Google News 追蹤
Thumbnail
Hi 我是 VK~ 在 8 月底寫完〈探索 AI 時代的知識革命:NotebookLM 如何顛覆學習和創作流程?〉後,有機會在 INSIDE POSSIBE 分享兩次「和 NotebookLM 協作如何改變我學習和創作」的主題,剛好最近也有在許多地方聊到關於 NotebookLM 等 AI 工具
Thumbnail
國泰CUBE App 整合外幣換匯、基金、證券等服務,提供簡便、低成本的美股定期定額投資解決方案。 5分鐘開戶、低投資門檻,幫助新手輕鬆進軍國際股市;提供人氣排行榜,讓投資人能夠掌握市場趨勢。
Thumbnail
這是張老師的第三本書,我想前二本應該也有很多朋友們都有讀過,我想絕對是受益良多,而這次在書名上就直接點出,著重在從投資的角度來切入
Thumbnail
這篇文章將介紹工程師使用版控和git的相關知識和技能,包括版本控制的意義和git的基本指令,以及開發流程和webhook的概念。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
本章節的目的是介紹Java中的套件使用,包括如何引用第三方套件和自定義模組,如何創建和使用自定義套件,以及介紹一些常見的Java標準庫套件。這些內容將幫助讀者更好地理解和使用Java的套件系統。
Thumbnail
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
※ 生產者和消費者模式 定義: 生產者和消費者在同一時間內共同存取某一個資料空間。生產者負責生成數據並將其放入共享空間,消費者負責從共享空間中取走數據進行處理。兩者之間互不相干,也不須互相知道對方的存在。 共同存取資料空間:生產者和消費者共享同一個資料空間。這個空間通常是緩衝區或隊列,用於在它
Thumbnail
需求情境: 在設計畫面時,資料來源是後台的 api,每一次畫面細節的修修改改,都會觸發 Xcode Preview 程序,導致不斷呼叫後台。此時若資料結構和大小都具有一定規模,就會導致效率低落,不斷等待,且消耗伺服器資源甚鉅。 解決方案: 將後台傳回的資料以檔案形式暫存在本地端,每次 pr
Thumbnail
套件(Package)是將程式或程式庫進行組織、分發和共享的一種方式。在軟體開發中,套件通常包含了相關的程式碼、資源文件和元數據,並提供了統一的名稱空間和版本管理。
Thumbnail
Hi 我是 VK~ 在 8 月底寫完〈探索 AI 時代的知識革命:NotebookLM 如何顛覆學習和創作流程?〉後,有機會在 INSIDE POSSIBE 分享兩次「和 NotebookLM 協作如何改變我學習和創作」的主題,剛好最近也有在許多地方聊到關於 NotebookLM 等 AI 工具
Thumbnail
國泰CUBE App 整合外幣換匯、基金、證券等服務,提供簡便、低成本的美股定期定額投資解決方案。 5分鐘開戶、低投資門檻,幫助新手輕鬆進軍國際股市;提供人氣排行榜,讓投資人能夠掌握市場趨勢。
Thumbnail
這是張老師的第三本書,我想前二本應該也有很多朋友們都有讀過,我想絕對是受益良多,而這次在書名上就直接點出,著重在從投資的角度來切入
Thumbnail
這篇文章將介紹工程師使用版控和git的相關知識和技能,包括版本控制的意義和git的基本指令,以及開發流程和webhook的概念。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
本章節的目的是介紹Java中的套件使用,包括如何引用第三方套件和自定義模組,如何創建和使用自定義套件,以及介紹一些常見的Java標準庫套件。這些內容將幫助讀者更好地理解和使用Java的套件系統。
Thumbnail
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
※ 生產者和消費者模式 定義: 生產者和消費者在同一時間內共同存取某一個資料空間。生產者負責生成數據並將其放入共享空間,消費者負責從共享空間中取走數據進行處理。兩者之間互不相干,也不須互相知道對方的存在。 共同存取資料空間:生產者和消費者共享同一個資料空間。這個空間通常是緩衝區或隊列,用於在它
Thumbnail
需求情境: 在設計畫面時,資料來源是後台的 api,每一次畫面細節的修修改改,都會觸發 Xcode Preview 程序,導致不斷呼叫後台。此時若資料結構和大小都具有一定規模,就會導致效率低落,不斷等待,且消耗伺服器資源甚鉅。 解決方案: 將後台傳回的資料以檔案形式暫存在本地端,每次 pr
Thumbnail
套件(Package)是將程式或程式庫進行組織、分發和共享的一種方式。在軟體開發中,套件通常包含了相關的程式碼、資源文件和元數據,並提供了統一的名稱空間和版本管理。