国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
為什麼選擇用 Chi ,而不是用標準函式庫或 Gin 或 router-x 進行路由?
讓我們開始吧
上面的程式碼是一些最佳實踐的重點
首頁 後端開發(fā) Golang 優(yōu)雅的實作 Golang REST API 架構(gòu)

優(yōu)雅的實作 Golang REST API 架構(gòu)

Jun 17, 2020 pm 05:48 PM
go golang

優(yōu)雅的實作 Golang REST API 架構(gòu)

##上一種說法,由golang 所寫的 API 簡單且通用。但實際上,我遇到很多 REST API 的程式碼,非常多的抽象,使得程式碼庫變得混亂和複雜,最終傷害了可讀性和可維護性。

這一系列,我們將透過如何建立一個產(chǎn)品級的REST API TODO 列表,一個可持續(xù)擴展架構(gòu),從路由和程式碼介面開始,然後添加一個mongo 的資料庫和一個badger 資料層,然後是授權(quán)協(xié)定層(OAuth 2.0)

在這一系列我們將使用chi 路由。

優(yōu)雅的實作 Golang REST API 架構(gòu)

為什麼選擇用 Chi ,而不是用標準函式庫或 Gin 或 router-x 進行路由?

嗯,其實選擇用什麼並不重要。無論你使用什麼來進行路由,本系列中討論的概念都將是有用的。但有下面的這些優(yōu)點可以讓我認為Chi-router 比大多數(shù)替代方案更優(yōu)越:

  • #和net/http 標準庫100% 相容-- -可在Go 生態(tài)系中使用任何與net / http 相容的http 或中介軟體pkg

  • 專為模組化/可組合API 設計- 中介軟體,內(nèi)嵌中間件,路由群組和子路由器安裝

  • 沒有外部依賴---純粹的就是Go 1.7 stdlib net / http

  • 強悍?---?有很多公司正在使用,例如:Pressly,CloudFlare,Heroku,99Designs

  • #輕量級?---?cloc'd in ~1000 LOC for the chi router

  • 速度很快

我最喜歡的是,你為其他net / http 相容路由器編寫的舊的http 處理程序和中間件也可以正常運作。

讓我們開始吧

首先,我們建立一個 main.go 。我們程式的基礎(或中心元件?)

優(yōu)雅的實作 Golang REST API 架構(gòu)

上面的程式碼是一些最佳實踐的重點

  1. 用一個單獨的套件來實現(xiàn)路由的邏輯,並將它們分好群組,然後安裝(mount) 它們:

r.Mount("/api/todo", todo.Routes())

  1. 給API 打上版本,這樣你就可以對api 進行更新時,不會破壞舊的客戶端:

router.Route("/v1", .... )

  1. 使用中間件作為擴充。使用了非常多路由的程式碼是非常笨重的,其實可以變成連結(jié)的中間件,像:授權(quán),設定回應頭部,壓縮,請求日誌,限速等。

筆者(基於 Ajinkya?在評論中提到的問題,我會更多的闡述 walk 方法):

chi 路由有一個方法叫做 walk。這個方法接收的參數(shù):

  • A router

  • #A callback.

##每個被定義的路由都會被回調(diào),並且接收4 個參數(shù):

  • 路由定義的方法

  • ##實際路由的字串
  • 處理器(函數(shù)),處理給定路由的請求
  • 給定路由中,定義過的中間件列表(中間件是一個比較簡單的函數(shù),它會在處理器被調(diào)用前調(diào)用,所以它們才會被使用在請求處理之前,授權(quán)等)
  • 以我為例,我將簡單地輪詢路由並且列印所有被定義的路由。從而讓我對所有可用的路由一目了然。

接下來我們建立一個 todo 套件,它實際上保存了我們 todo 邏輯。

優(yōu)雅的實作 Golang REST API 架構(gòu)注意事項

    todo 套件有一個傳回所有路由的方法。這些路由都是寫在 main.go 檔案中。實際上我通常會把這些路由寫在一個叫
  • routes.go 的檔案中,?

    這樣會很容易在套件裡找到.

    ##處理程序有?
  • func (w http.ResponseWriter,r *http.Request)?
  • 的函式簽名,這表示這處理程序和你使用標準函式庫的net/http 寫法沒有不同。

    使用render.JSON,一個encoding/json 的封裝, 它會自動轉(zhuǎn)義你JSON 回應中所有的html,並設定content-type 為application/json
  • 你被它有多簡單嚇到了嗎?可以在 GitHub 上查看這個專案?https://github.com/tonyalaribe/todoapi/tre....
  • 在我們本系列的下篇文章中, 我們會繼續(xù)對配置和共享狀態(tài)的支援。大多數(shù)項目通常需要額外的配置,例如資料庫連接,等等。我們將會在下篇文章中討論這個。

    推薦教學:《Go教學

以上是優(yōu)雅的實作 Golang REST API 架構(gòu)的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

將Golang服務與現(xiàn)有Python基礎架構(gòu)集成的策略 將Golang服務與現(xiàn)有Python基礎架構(gòu)集成的策略 Jul 02, 2025 pm 04:39 PM

TOIntegrategolangServicesWithExistingPypythoninFrasture,userestapisorgrpcForinter-serviceCommunication,允許GoandGoandPyThonAppStoStoInteractSeamlessSeamLlyThroughlyThroughStandArdArdAdrotized Protoccols.1.usererestapis(ViaFrameWorkslikeSlikeSlikeGiningOandFlaskInpyThon)Orgrococo(wirs Propococo)

了解Web API的Golang和Python之間的性能差異 了解Web API的Golang和Python之間的性能差異 Jul 03, 2025 am 02:40 AM

Golangofferssuperiorperformance,nativeconcurrencyviagoroutines,andefficientresourceusage,makingitidealforhigh-traffic,low-latencyAPIs;2.Python,whileslowerduetointerpretationandtheGIL,provideseasierdevelopment,arichecosystem,andisbettersuitedforI/O-bo

內(nèi)存足跡比較:在Golang和Python中運行相同的Web服務工作負載 內(nèi)存足跡比較:在Golang和Python中運行相同的Web服務工作負載 Jul 03, 2025 am 02:32 AM

Gousessigantallymorythanpythanpythonwhenrunningwebservicesduetolanguigedesignesignandconcurrencymodeldifferences.1.go'sgoroutinesarelelightwithwithminimalstackoverhead,允許效率效率,使得十種

如何安裝去 如何安裝去 Jul 09, 2025 am 02:37 AM

安裝Go的關(guān)鍵在於選擇正確版本、配置環(huán)境變量並驗證安裝。 1.前往官網(wǎng)下載對應系統(tǒng)的安裝包,Windows使用.msi文件,macOS使用.pkg文件,Linux使用.tar.gz文件並解壓至/usr/local目錄;2.配置環(huán)境變量,在Linux/macOS中編輯~/.bashrc或~/.zshrc添加PATH和GOPATH,Windows則在系統(tǒng)屬性中設置PATH為Go的安裝路徑;3.使用goversion命令驗證安裝,並運行測試程序hello.go確認編譯執(zhí)行正常。整個流程中PATH設置和環(huán)

Go Sync.WaitGroup示例 Go Sync.WaitGroup示例 Jul 09, 2025 am 01:48 AM

sync.WaitGroup用於等待一組goroutine完成任務,其核心是通過Add、Done、Wait三個方法協(xié)同工作。 1.Add(n)設置需等待的goroutine數(shù)量;2.Done()在每個goroutine結(jié)束時調(diào)用,計數(shù)減一;3.Wait()阻塞主協(xié)程直到所有任務完成。使用時需注意:Add應在goroutine外調(diào)用、避免重複Wait、務必確保Done被調(diào)用,推薦配合defer使用。常見於並發(fā)抓取網(wǎng)頁、批量數(shù)據(jù)處理等場景,能有效控制並發(fā)流程。

如何在GO中使用OS.MKDIR()函數(shù)創(chuàng)建目錄? 如何在GO中使用OS.MKDIR()函數(shù)創(chuàng)建目錄? Jun 29, 2025 am 01:45 AM

toCreateadirectoryingo,useos.mkdir()wherparentDirectoriesExist,oros.mkdirall()

選擇微服務框架:Kitex/Gomicro vs Python燒瓶/FastApi方法 選擇微服務框架:Kitex/Gomicro vs Python燒瓶/FastApi方法 Jul 02, 2025 pm 03:33 PM

選微服務框架應根據(jù)項目需求、團隊技術(shù)棧和性能預期來決定。 1.性能要求高時優(yōu)先考慮Go的KitEx或GoMicro,尤其KitEx適合複雜服務治理和大規(guī)模系統(tǒng);2.快速開發(fā)和迭代場景下Python的FastAPI或Flask更靈活,適合小團隊和MVP項目;3.團隊技能棧直接影響選型成本,已有Go積累則延續(xù)使用更高效,Python團隊貿(mào)然轉(zhuǎn)Go可能影響效率;4.Go框架在服務治理生態(tài)上更成熟,適合未來需對接高級功能的中大型系統(tǒng);5.可按模塊採用混合架構(gòu),不必拘泥於單一語言或框架。

如何使用WaitGroup等待所有Goroutines在Golang完成的所有Goroutines? 如何使用WaitGroup等待所有Goroutines在Golang完成的所有Goroutines? Jun 28, 2025 am 01:48 AM

在Go中使用sync.WaitGroup等待所有g(shù)oroutine完成任務的核心方法是:1.初始化WaitGroup並在啟動每個goroutine前調(diào)用Add(1);2.在每個goroutine內(nèi)部使用deferwg.Done()確保任務完成後計數(shù)減一;3.主協(xié)程調(diào)用wg.Wait()阻塞等待所有任務完成。這種機制適用於並發(fā)執(zhí)行任務並彙總結(jié)果的場景,如批量處理或併發(fā)請求。使用時需注意:Add應在主協(xié)程中調(diào)用、Done必須配合defer使用、WaitGroup應以指針方式傳遞,避免因複制值或pan

See all articles