首頁 > 後端開發 > Golang > 主體

如何使用 GopherLight 像專業人士一樣在 Go 中編寫 API

Linda Hamilton
發布: 2024-10-30 16:56:03
原創
972 人瀏覽過

How to Write APIs Like a Pro in Go with GopherLight

文件

GopherLight

大家好,首先我要感謝您選擇使用我們的項目。儘管他很小,但我們卻以極大的熱情做到了!要開始使用它,您首先必須安裝 go,我們假設您已經安裝了它。然後安裝框架的主要模組,分別是req和router

go get github.com/BrunoCiccarino/GopherLight/router
go get github.com/BrunoCiccarino/GopherLight/req
登入後複製
登入後複製
登入後複製

已經下載了?唷!現在我們可以製作我們的第一個hello world。

package main

import (
    "fmt"
    "github.com/BrunoCiccarino/GopherLight/router"
    "github.com/BrunoCiccarino/GopherLight/req"
)


func main() {
    app := router.NewApp()

    // Define a route that responds to a GET request at "/hello".
    app.Get("/hello", func(r *req.Request, w *req.Response) {
        w.Send("Hello, World!")
    })

    fmt.Println("Server listening on port 3333")
    app.Listen(":3333")
}
登入後複製
登入後複製
登入後複製

很簡單,對吧?我們還可以利用 GopherLight 做更多事情。繼續閱讀 HTTP 方法以及我們的請求和回應工具的完整細分。

支援的 HTTP 方法
以下是您可以與 router.App 一起使用的 HTTP 方法的清單。其中每一個都允許您設定路由來處理不同類型的請求。讓我們開始吧!

得到

  • 用法:app.Get(路徑,處理程序)

檢索資料而不修改任何內容。
範例:取得項目清單或讀取使用者詳細資訊。

郵政

  • 用法:app.Post(路徑,處理程序)

發送資料以建立新資源。
範例:提交表單或向清單新增項目。

用法:app.Put(路徑, 處理程序)

更新或替換資源。這是一個“覆蓋”操作。
範例:更新完整的用戶個人資料。

刪除

用法:app.Delete(path, handler)

刪除資源。
範例:刪除使用者或刪除貼文。

修補

用法:app.Patch(path, handler)

部分更新資源而不替換所有內容。
範例:僅更新使用者個人資料上的電子郵件。

選項

用法:app.Options(path, handler)

傳回 URL 允許的 HTTP 方法,主要用於 CORS 預檢請求。

用法:app.Head(路徑, 處理程序)

與 GET 類似,但沒有回應正文。用它來檢查資源是否存在。

連接和追蹤

用法:app.Connect(path, handler), app.Trace(path, handler)

進階方法:CONNECT建立隧道(用於SSL),TRACE用於偵錯,回顯請求。

使用 req.Request 和 req.Response

現在您已經了解了路由,讓我們來談談請求和回應對象,它們是處理傳入請求和發送回應的首選助理。

要求

每個請求處理程序都會取得一個請求對象,其中載入了傳入請求的資訊。您可以使用它來執行以下操作:

  • 查詢參數:透過 .QueryParam("key") 取得查詢參數。
  • 標頭:使用 .Header("key") 存取標頭。
  • Body as String:使用 .BodyAsString() 取得請求正文。

例子:

go get github.com/BrunoCiccarino/GopherLight/router
go get github.com/BrunoCiccarino/GopherLight/req
登入後複製
登入後複製
登入後複製

回覆

Response 物件可協助您將回覆傳送回客戶端。您可以執行以下操作:

  • 發送文字:.Send(data string) 寫回純文字。
  • 設定狀態:.Status(code) 設定 HTTP 狀態。
  • 傳送 JSON:.JSON(data) 將 Go 物件序列化為 JSON 並傳送。
  • 處理錯誤:.JSONError(message) 傳送 JSON 格式的錯誤回應。

例子:

package main

import (
    "fmt"
    "github.com/BrunoCiccarino/GopherLight/router"
    "github.com/BrunoCiccarino/GopherLight/req"
)


func main() {
    app := router.NewApp()

    // Define a route that responds to a GET request at "/hello".
    app.Get("/hello", func(r *req.Request, w *req.Response) {
        w.Send("Hello, World!")
    })

    fmt.Println("Server listening on port 3333")
    app.Listen(":3333")
}
登入後複製
登入後複製
登入後複製

中介軟體

我們已經準備好了一批中間件,供您為 Go Web 應用程式添加一些重要的功能。這些中間件中的每一個都有自己的魔力——安全性、日誌記錄、逾時等等!讓我們一一分解。 ?

身份驗證中間件 (JWT)

我們的 AuthMiddleware 使用 JSON Web 令牌 (JWT) 來協助保護您的路由。它很靈活,可讓您自訂密鑰、錯誤處理和令牌提取方法。

設定
首先,使用 JWTConfig 設定您的 JWT 設定:

  • SecretKey:用於簽署 JWT 的金鑰。
  • SigningMethod:JWT 簽章演算法。
  • ErrorHandler:用於處理驗證錯誤的自訂錯誤處理程序(可選)。
  • TokenExtractor:從請求標頭中提取令牌(可選)。

例子

app.Get("/greet", func(r *req.Request, w *req.Response) {
    name := r.QueryParam("name")
    if name == "" {
        name = "stranger"
    }
    w.Send("Hello, " + name + "!")
})
登入後複製
登入後複製

CORS中介軟體

需要允許跨域請求?沒問題!我們的 COSM 中間件配置跨來源資源共享 (CORS) 設置,使您的 API 可從其他網域存取。

設定選項

  • AllowOrigin:設定為「*」以允許任何來源或指定網域(例如「http://example.com」)。
  • AllowMethods:允許哪些 HTTP 方法?常見的選擇包括「GET」、「POST」等
  • AllowHeaders:指定客戶端可以使用哪些標頭。
  • AllowCredentials:如果您希望包含 cookie 或 HTTP 驗證,請設定為 true。
  • ExposeHeaders:讓客戶端從回應中讀取特定標頭。
  • MaxAge:預檢請求的快取時間(以秒為單位)。

例子

app.Get("/user", func(r *req.Request, w *req.Response) {
    user := map[string]string{"name": "Gopher", "language": "Go"}
    w.JSON(user)
})
登入後複製
登入後複製

CSRF中介軟體

我們的 CSRFMiddleware 透過驗證隨每個請求發送的 CSRF 令牌來防止跨站點請求偽造。使用GenerateCSRFToken() 建立安全令牌,然後使用您自己的isValidToken 函數對其進行驗證。

例子

import (
    "github.com/BrunoCiccarino/GopherLight/middleware"
)

config := middleware.JWTConfig{
    SecretKey: []byte("your_secret_key"),
}
app.Use(middleware.NewAuthMiddleware(config))
登入後複製
登入後複製

並且不要忘記使用以下方式產生令牌:

go get github.com/BrunoCiccarino/GopherLight/router
go get github.com/BrunoCiccarino/GopherLight/req
登入後複製
登入後複製
登入後複製

日誌中介軟體

想要追蹤伺服器上發生的情況嗎? LoggingMiddleware 記錄每個請求,包括方法、路徑和所用時間。這是了解應用效能和任何異常活動的好方法。

例子

package main

import (
    "fmt"
    "github.com/BrunoCiccarino/GopherLight/router"
    "github.com/BrunoCiccarino/GopherLight/req"
)


func main() {
    app := router.NewApp()

    // Define a route that responds to a GET request at "/hello".
    app.Get("/hello", func(r *req.Request, w *req.Response) {
        w.Send("Hello, World!")
    })

    fmt.Println("Server listening on port 3333")
    app.Listen(":3333")
}
登入後複製
登入後複製
登入後複製

每個請求都會像這樣記錄:

  • 開始:記錄請求開始時間。
  • 已完成:請求完成時記錄,包括持續時間。

超時中介軟體

透過使用 TimeoutMiddleware 設定請求處理的時間限制來避免無休止的等待。如果請求未及時完成,該中間件將取消請求,並向用戶端發送 504 網關逾時狀態。

例子

app.Get("/greet", func(r *req.Request, w *req.Response) {
    name := r.QueryParam("name")
    if name == "" {
        name = "stranger"
    }
    w.Send("Hello, " + name + "!")
})
登入後複製
登入後複製

插件介面

外掛程式介面超簡單但功能超強。它為您提供了一個方法:註冊。這使您可以連接到應用程式的路由系統來添加您需要的任何路由 - 無論是新的 API 端點、Webhook 還是您可以想像的任何其他內容。

註冊方法
這是插件介面的神奇部分:

app.Get("/user", func(r *req.Request, w *req.Response) {
    user := map[string]string{"name": "Gopher", "language": "Go"}
    w.JSON(user)
})
登入後複製
登入後複製

Register 方法接受一個路由函數,讓您可以透過指定以下方式在外掛程式中定義新路由:

  • 方法:HTTP 方法(例如「GET」、「POST」等)
  • path:路由路徑(例如「/my-plugin-route」)
  • handler:命中路由時執行的函數。此函數接收:
    • req:可以存取查詢參數、標頭和正文的請求物件。
    • res:將資料傳回客戶端的回應對象。

範例插件

假設您想要建立一個插件,在 /hello-plugin 處新增一個簡單的端點來歡迎使用者。插件如下圖所示:

import (
    "github.com/BrunoCiccarino/GopherLight/middleware"
)

config := middleware.JWTConfig{
    SecretKey: []byte("your_secret_key"),
}
app.Use(middleware.NewAuthMiddleware(config))
登入後複製
登入後複製

將插件添加到您的應用程式

要載入插件,只需建立一個實例並在主應用程式設定中呼叫 Register:

corsOptions := middleware.CORSOptions{
    AllowOrigin: "*",
    AllowMethods: []string{"GET", "POST"},
}
app.Use(middleware.CORSMiddleware(corsOptions))
登入後複製

客製化您的插件

每個插件都可以根據需要添加任意數量的路由。只需在 Register 函數中多次呼叫路由即可定義其他端點。使用不同的 HTTP 方法、路徑和處理程序來根據需要塑造插件的功能。

以上是如何使用 GopherLight 像專業人士一樣在 Go 中編寫 API的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!