首頁  >  文章  >  後端開發  >  優雅的實作 Golang REST API 架構

優雅的實作 Golang REST API 架構

Guanhui
Guanhui轉載
2020-06-17 17:48:334134瀏覽

優雅的實作 Golang REST API 架構

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

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

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

優雅的實作 Golang REST API 架構

為什麼選擇用 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 。我們程式的基礎(或中心元件?)

優雅的實作 Golang REST API 架構

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

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

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

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

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

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

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

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

  • A router

  • #A callback.

##每個被定義的路由都會被回調,並且接收4 個參數:

  • 路由定義的方法

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

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

優雅的實作 Golang REST API 架構注意事項

    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中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除