成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在 Go 應用中像 FastAPI 一樣優雅地構建控制器

開發 前端
go-rest-kit 為 Go 開發者提供了一種類似 FastAPI 的優雅方式來構建 RESTful API。它通過自動請求解析、預定義控制器方法和可擴展的組件設計,大大簡化了 API 開發流程,提高了代碼的可讀性和可維護性。

在 Python 中,FastAPI 憑借其自動請求解析、數據驗證和類型提示等強大功能,成為了構建 API 的熱門框架。然而,在 Go 語言中,卻鮮少有框架能夠提供類似的便捷體驗。開發者往往需要在每個 API 處理程序中重復編寫相同的解析和錯誤處理邏輯,這無疑增加了代碼的冗余度和維護成本。

go-rest-kit 的出現正是為了解決這一痛點。它提供了一套現成的包,可以幫助開發者快速構建基于 Gin 框架的 RESTful API,并通過類似 FastAPI 的方式定義控制器,從而避免重復編寫繁瑣的代碼。

go-rest-kit 的設計理念

go-rest-kit 的核心目標是簡化 Go 應用中 REST API 的開發流程,其設計理念主要體現在以下幾個方面:

  • 自動請求解析和驗證:  go-rest-kit 利用 Go 的類型系統和結構體標簽,實現了類似 FastAPI 的自動請求解析和驗證功能。開發者只需定義好請求和響應的數據結構,并添加相應的標簽,即可自動完成數據的綁定和校驗。
  • 控制器方法: go-rest-kit 提供了一系列預定義的控制器方法,例如 Create、Retrieve、Update、Delete 等,涵蓋了常見的 CRUD 操作。開發者只需將這些方法與路由綁定,即可快速構建 API 接口。
  • 可擴展性:  go-rest-kit 的各個組件都設計為可插拔的,開發者可以根據自身需求,替換或擴展默認的實現。例如,可以使用自定義的數據庫訪問層、身份驗證機制等。

快速上手

安裝

go get github.com/krsoninikhil/go-rest-kit

示例:構建 CRUD API

以下示例演示了如何使用 go-rest-kit 構建一個簡單的 CRUD API:

// models.go
package models

import (
 "fmt"

 "github.com/krsoninikhil/go-rest-kit/pgdb"
)

// BusinessType represents a business type entity.
type BusinessType struct {
 Name string `json:"name"`
 Icon string `json:"icon"`
 pgdb.BaseModel
}

// ResourceName returns the resource name of the BusinessType model.
func (b BusinessType) ResourceName() string {
 return fmt.Sprintf("%T", b)
}
// entities.go
package types

// BusinessTypeRequest represents the request payload for creating or updating a business type.
type BusinessTypeRequest struct {
 Name string `json:"name" binding:"required"`
 Icon string `json:"icon"`
}

// BusinessTypeResponse represents the response payload for a business type.
type BusinessTypeResponse struct {
 BusinessTypeRequest
 ID int `json:"id"`
}

// ToModel converts a BusinessTypeRequest to a BusinessType model.
func (b BusinessTypeRequest) ToModel(_ *gin.Context) models.BusinessType {
 return models.BusinessType{Name: b.Name, Icon: b.Icon}
}

// FillFromModel fills a BusinessTypeResponse with data from a BusinessType model.
func (b BusinessTypeResponse) FillFromModel(m models.BusinessType) crud.Response[models.BusinessType] {
 return BusinessTypeResponse{
  ID:               m.ID,
  BusinessTypeRequest: BusinessTypeRequest{Name: m.Name, Icon: m.Icon},
 }
}

// ItemID returns the ID of the business type.
func (b BusinessTypeResponse) ItemID() int { return b.ID }
// main.go
package main

import (
 "fmt"

 "github.com/gin-gonic/gin"
 "github.com/krsoninikhil/go-rest-kit/crud"
 "github.com/krsoninikhil/go-rest-kit/request"
)

func main() {
 // Assuming you have a database connection `db` and a business type DAO `businessTypeDao`
 businessTypeDao := crud.Dao[models.BusinessType]{PGDB: db}
 businessTypeCtlr := crud.Controller[models.BusinessType, types.BusinessTypeResponse, types.BusinessTypeRequest]{
  Svc: &businessTypeDao,
 }

 r := gin.Default()
 r.GET("/business-types", request.BindGet(businessTypeCtlr.Retrieve))
 r.GET("/business-types", request.BindGet(businessTypeCtlr.List))
 r.POST("/business-types", request.BindCreate(businessTypeCtlr.Create))
 r.PATCH("/business-types", request.BindUpdate(businessTypeCtlr.Update))
 r.DELETE("/business-types", request.BindDelete(businessTypeCtlr.Delete))

 // Start your server
}

在上面的示例中,我們首先定義了 BusinessType 模型、BusinessTypeRequest 請求結構體和 BusinessTypeResponse 響應結構體。然后,我們創建了一個 crud.Controller 實例,并將 businessTypeDao 作為服務注入其中。最后,我們使用 request 包提供的綁定方法將控制器方法與路由綁定起來。

示例:加載應用程序配置

go-rest-kit 提供了便捷的配置加載機制,支持從 YAML 文件和環境變量中讀取配置信息。

// config.go
package config

import (
 "fmt"

 "github.com/krsoninikhil/go-rest-kit/auth"
 "github.com/krsoninikhil/go-rest-kit/pgdb"
 "github.com/krsoninikhil/go-rest-kit/twilio"
)

// Config defines the application configuration structure.
type Config struct {
 DB     pgdb.Config
 Twilio twilio.Config
 Auth   auth.Config
 Env    string
}

// EnvPath returns the path to the .env file.
func (c *Config) EnvPath() string { return "./.env" }

// SourcePath returns the path to the YAML configuration file.
func (c *Config) SourcePath() string { return fmt.Sprintf("./api/%s.yml", c.Env) }

// SetEnv sets the environment for the configuration.
func (c *Config) SetEnv(env string) { c.Env = env }
// main.go
package main

import (
 "context"

 "github.com/krsoninikhil/go-rest-kit/config"
)

func main() {
 var (
  ctx  = context.Background()
  conf Config
 )

 config.Load(ctx, &conf)

 // Use the loaded configuration
 db := pgdb.NewPGConnection(ctx, conf.DB)
 // ...
}

在上面的示例中,我們定義了 Config 結構體,并實現了 config.AppConfig 接口。然后,我們使用 config.Load 方法加載配置信息。

核心包詳解

go-rest-kit 包含以下核心包:

  • request: 提供基于請求類型的參數綁定功能,允許控制器方法直接接收解析后的請求參數和請求體,避免在每個控制器中重復編寫解析邏輯。
  • crud:  提供用于常見 CRUD 操作的控制器,例如 crud.Controller 和 crud.NestedController。
  • apperrors: 提供應用程序中常用的錯誤類型,例如 apperrors.NewServerError、apperrors.NewNotFoundError 等。
  • config: 提供快速加載和解析配置文件的方法,支持從 YAML 文件和環境變量中讀取配置信息。
  • pgdb: 提供 PostgreSQL 數據庫連接配置和創建方法。
  • integrations: 提供常用的第三方客戶端,例如 Twilio 客戶端,用于發送 OTP 短信驗證碼。
  • auth: 提供與身份驗證相關的功能,例如注冊、登錄、OTP 驗證、令牌刷新等。

總結

go-rest-kit 為 Go 開發者提供了一種類似 FastAPI 的優雅方式來構建 RESTful API。它通過自動請求解析、預定義控制器方法和可擴展的組件設計,大大簡化了 API 開發流程,提高了代碼的可讀性和可維護性。

如果您正在使用 Go 語言開發 REST API,不妨嘗試一下 go-rest-kit,相信它會讓您的開發體驗更加流暢和高效。

責任編輯:武曉燕 來源: 源自開發者
相關推薦

2025-01-09 10:32:05

2023-02-15 08:17:20

VSCodeTypeScrip

2021-04-12 10:20:20

Java微服務Go

2023-04-05 14:19:07

FlinkRedisNoSQL

2022-10-21 13:52:56

JS 報錯調試本地源碼

2022-01-10 21:00:12

LinuxGNOME截圖工具

2022-12-13 07:41:43

CSSCSS Houdi

2020-11-17 15:31:23

Java微服務Go

2013-12-17 09:02:03

Python調試

2013-12-31 09:19:23

Python調試

2023-05-23 13:59:41

RustPython程序

2022-12-21 15:56:23

代碼文檔工具

2025-06-16 10:00:00

C++代碼Python

2017-10-17 14:47:02

AndriodGradle依賴

2021-04-20 15:38:56

iOS平臺應用分發開發者

2016-03-01 17:48:32

WLAN控制器網絡管理

2017-04-12 11:16:08

Python終端編程

2015-02-05 13:27:02

移動開發模塊SDK

2012-06-08 13:47:32

Wndows 8Vista
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久草免费在线视频 | a级网站 | 日本成人在线网址 | a在线免费观看 | 亚洲人成在线观看 | 国产99视频精品免视看9 | h视频免费在线观看 | 97国产精品视频人人做人人爱 | 福利视频一二区 | 91视频日本 | 国产激情自拍视频 | 欧产日产国产精品国产 | 青青草网 | 国产日韩久久 | 欧美韩一区二区三区 | 久久久久久久久久久国产 | 国产一级片精品 | 国产欧美一区二区三区久久 | 中文字幕在线免费视频 | 91麻豆精品国产91久久久资源速度 | 国产精品美女一区二区 | 国产成人综合久久 | 日韩有码一区二区三区 | 久久久久久国产精品免费免费 | 午夜视频免费网站 | 国产精品夜间视频香蕉 | 亚洲精品在线免费播放 | 一级美国黄色片 | 国产黄色一级片 | 中文字幕精品一区二区三区精品 | 亚洲午夜视频在线观看 | 美女天天操 | 欧美一级片在线观看 | 午夜免费福利电影 | 毛片免费视频 | 91看片视频| 国产成人免费在线 | 国产一区二区在线免费观看 | 免费色网址 | 国产成人久久精品 | 国产亚洲日本精品 |