在Python中編寫有效的微服務,實用!長文建議收藏!

尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️

加入LINE好友

長文慎入:API First方法結合Connexion是創建高效微服務的強大工具。 API First方法的使用為創建滿足客戶期望的API帶來了好處。 除此之外,使用Connexion將幫助你以平滑的方式在Python中開發API。

Google收購Apigee強調了API在當今應用程序架構中的重要性,使用精心設計的API的微服務對保持業務成功至關重要,因為它簡化了複雜軟件解決方案的開發。成長型公司會經歷來自市場變化和滿足客戶需求等因素而自然提高的複雜性,類似Zalando這樣面臨挑戰的公司選擇了採用微服務,旨在使其更易於構建和維護其應用程序。

微服務是一種將複雜的軟件解決方案分解成更小的可組合服務的風格,這些小型服務可以獨立維護和部署,每個服務都圍繞通常提供REST API的業務功能開發,清晰闡述每個服務提供的功能可以對團隊一起構建和維護其微服務的生產力產生巨大影響。微服務開發人員應該向那些負責構建和維護Web、移動或其他服務的客戶端開發人員提供如何使用其REST API的描述,未能以清晰的方式描述API以及不能及時更新文檔,會導致系統設計被破壞,也使團隊成員感到沮喪,構建API First方法就是解決這些問題的方案。

API First方法

API First方法最近已經添加到應用程序開發方法的首要12個因素中 — 一組用於開發強大應用程序的規則和指南,是由一群有豐富經驗的開發人員在構建Heroku平台時提出的。它是一種方法,重點是將API規範作為開發過程的第一類工件,是開發人員和團隊之間共享的約定。即使在編寫第一行代碼之前,構建規範就可以促進API的使用者之間的討論,創建API的模擬,以及生成文檔。

Google,IBM,Microsoft和其他公司已經攜手創建Open API計劃(OAI),以支持、定義和建立一個獨立於供應商的格式,用於描述稱為Open API Specification(以前稱為Swagger 2.0)的REST API。還有其他用於描述API的格式,可以與API First方法一起使用,最著名的是API Blueprint和RAML,但是Open API格式目前擁有更大的用戶和支持者社群.按照Open API格式規範編寫的API說明,可以容易地生成初始代碼,並支持許多語言和框架:Ruby,Java,Node,C#等。對於Python,Connexion是API First開發的最佳選擇,因為它既不依賴代碼生成也不需要樣板代碼。

Connexion是一個建立在Flask之上的開源框架,由Zalando創建,它根據API First方法促進Python中微服務的開發,以滿足這種解決方案的內部需求。Connexion正在積極發展,我(原文作者)是該項目的主要維護者之一,以及Joao Santos和Henning Jacobs。

在Python中構建一個簡單的服務

在Python中構建有效微服務的第一步就是描述在我們的API中使用到的資源,並使用OpenAPI標準描述它們。我們將重點闡述我們的API產生的路由、參數、數據和響應代碼。我們從一個簡單的節點示例開始,該節點響應字符串「Hello API!」。

在上面的代碼段中,我們指定了我們的API有一個節點「/ greeting」,接受請求方法為「GET」,並返回狀態碼200表示成功。 注意,業務邏輯不在我們的規範中定義,這部分是由我們節點在Python中做到。 「operationId」就是定義對節點進行調用時執行的Python函數。

如你所見,Connexion API處理程序沒有架式例代碼,API調用的處理程序就是返回簡單數據結構的普通Python函數。處理程序返回的數據結構可以通過Connexion進行API規範驗證(如果指定的話),默認情況下禁用此驗證以增加在開發期間的靈活性。現在我們可以通過Connexion將我們的代碼通過API規範黏合併運行,最簡單的運行方法是使用Connexion CLI工具:

現在我們可以打開瀏覽器並訪問地址http://localhost:5000/greeting,我們應該能看到如下消息:

為了使其更具動態性,我們可以更改規範,為用戶名添加HTTP參數。為此,我們的規範應該看起來像這樣:

現在Connexion將一個可選參數傳遞給我們的函數,更改後的Python函數如下:

現在,我們的Python代碼和API規範匹配,我們可以重新啟動我們的服務器,按Ctrl + C並再次運行以下命令來查看這些更改。

我們的服務器再次監聽http://localhost:5000/greeting,此外,現在可以傳遞可選參數「name」。Connexion包括可在http:// localhost:5000/ui上使用的API控制台界面。默認情況下,啟用此控制台UI可以輕鬆調用API的節點,它也作為我們的微服務的文檔。

現在我們知道如何創建Connexion應用程序的基礎知識。有關更詳細的示例,請檢查Github上提供的Connexion示例項目。官方Connexion文檔是包含完整的功能信息的資源。在使用Connexion開發RESTful微服務時可作為參考。

向前

企業開始意識到API First方法的好處。Etsy發表了一篇博文,描述了API First方法如何幫助他們通過提供一致的API來解決挑戰。在Zalando,API First是他們軟件開發生命周期的核心,評審過程的反饋以及創建RESTful微服務的指南都已經開源。

我們可以找到許多支持不同語言的API First方法的開源工具。Connexion是在Python中做到API First方法的完美框架,並且在積極開發中,Connexion不依賴代碼,這使得您可以自由地演進您的API規範,而不破壞已經做到的代碼。

About 尋夢園
尋夢園是台灣最大的聊天室及交友社群網站。 致力於發展能夠讓會員們彼此互動、盡情分享自我的平台。 擁有數百間不同的聊天室 ,讓您隨時隨地都能找到志同道合的好友!