##上一種說法,由golang 所寫的 API 簡單且通用。但實際上,我遇到很多 REST API 的程式碼,非常多的抽象,使得程式碼庫變得混亂和複雜,最終傷害了可讀性和可維護性。
這一系列,我們將透過如何建立一個產品級的REST API TODO 列表,一個可持續擴展架構,從路由和程式碼介面開始,然後添加一個mongo 的資料庫和一個badger 資料層,然後是授權協定層(OAuth 2.0)
在這一系列我們將使用chi 路由。
為什麼選擇用 Chi ,而不是用標準函式庫或 Gin 或 router-x 進行路由?
嗯,其實選擇用什麼並不重要。無論你使用什麼來進行路由,本系列中討論的概念都將是有用的。但有下面的這些優點可以讓我認為Chi-router 比大多數替代方案更優越:
#和
net/http
標準庫100% 相容-- -可在Go 生態系中使用任何與net / http 相容的http 或中介軟體pkg專為模組化/可組合API 設計- 中介軟體,內嵌中間件,路由群組和子路由器安裝
沒有外部依賴---純粹的就是Go 1.7 stdlib net / http
強悍 --- 有很多公司正在使用,例如:Pressly,CloudFlare,Heroku,99Designs
#輕量級 --- cloc'd in ~1000 LOC for the chi router
速度很快
我最喜歡的是,你為其他net / http 相容路由器編寫的舊的http 處理程序和中間件也可以正常運作。
讓我們開始吧
首先,我們建立一個 main.go 。我們程式的基礎(或中心元件?)
上面的程式碼是一些最佳實踐的重點
- 用一個單獨的套件來實現路由的邏輯,並將它們分好群組,然後安裝(mount) 它們:
r.Mount("/api/todo", todo.Routes())
- 給API 打上版本,這樣你就可以對api 進行更新時,不會破壞舊的客戶端:
router.Route("/v1", .... )
- 使用中間件作為擴充。使用了非常多路由的程式碼是非常笨重的,其實可以變成連結的中間件,像:授權,設定回應頭部,壓縮,請求日誌,限速等。
筆者(基於 Ajinkya 在評論中提到的問題,我會更多的闡述 walk 方法):
chi 路由有一個方法叫做 walk。這個方法接收的參數:
A router
#A callback.
- 路由定義的方法 ##實際路由的字串
- 處理器(函數),處理給定路由的請求
- 給定路由中,定義過的中間件列表(中間件是一個比較簡單的函數,它會在處理器被調用前調用,所以它們才會被使用在請求處理之前,授權等)
- 以我為例,我將簡單地輪詢路由並且列印所有被定義的路由。從而讓我對所有可用的路由一目了然。
接下來我們建立一個 todo 套件,它實際上保存了我們 todo 邏輯。
注意事項
- todo 套件有一個傳回所有路由的方法。這些路由都是寫在 main.go 檔案中。實際上我通常會把這些路由寫在一個叫
- routes.go 的檔案中,
這樣會很容易在套件裡找到.
##處理程序有 func (w http.ResponseWriter,r *http.Request) - 的函式簽名,這表示這處理程序和你使用標準函式庫的net/http 寫法沒有不同。
使用render.JSON,一個encoding/json 的封裝, 它會自動轉義你JSON 回應中所有的html,並設定content-type 為application/json - 你被它有多簡單嚇到了嗎?可以在 GitHub 上查看這個專案 https://github.com/tonyalaribe/todoapi/tre....
在我們本系列的下篇文章中, 我們會繼續對配置和共享狀態的支援。大多數項目通常需要額外的配置,例如資料庫連接,等等。我們將會在下篇文章中討論這個。
推薦教學:《Go教學》
以上是優雅的實作 Golang REST API 架構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Golangisidealforbuildingscalablesystemsduetoitsefficiencyandconcurrency,whilePythonexcelsinquickscriptinganddataanalysisduetoitssimplicityandvastecosystem.Golang'sdesignencouragesclean,readablecodeanditsgoroutinesenableefficientconcurrentoperations,t

Golang在並發性上優於C ,而C 在原始速度上優於Golang。 1)Golang通過goroutine和channel實現高效並發,適合處理大量並發任務。 2)C 通過編譯器優化和標準庫,提供接近硬件的高性能,適合需要極致優化的應用。

選擇Golang的原因包括:1)高並發性能,2)靜態類型系統,3)垃圾回收機制,4)豐富的標準庫和生態系統,這些特性使其成為開發高效、可靠軟件的理想選擇。

Golang適合快速開發和並發場景,C 適用於需要極致性能和低級控制的場景。 1)Golang通過垃圾回收和並發機制提升性能,適合高並發Web服務開發。 2)C 通過手動內存管理和編譯器優化達到極致性能,適用於嵌入式系統開發。

Golang在編譯時間和並發處理上表現更好,而C 在運行速度和內存管理上更具優勢。 1.Golang編譯速度快,適合快速開發。 2.C 運行速度快,適合性能關鍵應用。 3.Golang並發處理簡單高效,適用於並發編程。 4.C 手動內存管理提供更高性能,但增加開發複雜度。

Golang在Web服務和系統編程中的應用主要體現在其簡潔、高效和並發性上。 1)在Web服務中,Golang通過強大的HTTP庫和並發處理能力,支持創建高性能的Web應用和API。 2)在系統編程中,Golang利用接近硬件的特性和對C語言的兼容性,適用於操作系統開發和嵌入式系統。

Golang和C 在性能對比中各有優劣:1.Golang適合高並發和快速開發,但垃圾回收可能影響性能;2.C 提供更高性能和硬件控制,但開發複雜度高。選擇時需綜合考慮項目需求和團隊技能。

Golang适合高性能和并发编程场景,Python适合快速开发和数据处理。1.Golang强调简洁和高效,适用于后端服务和微服务。2.Python以简洁语法和丰富库著称,适用于数据科学和机器学习。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

禪工作室 13.0.1
強大的PHP整合開發環境