https://github.com/sashabaranov/go-fastapi
Create an API and get Swagger definition for free
https://github.com/sashabaranov/go-fastapi
gin go golang openapi swagger
Last synced: 4 months ago
JSON representation
Create an API and get Swagger definition for free
- Host: GitHub
- URL: https://github.com/sashabaranov/go-fastapi
- Owner: sashabaranov
- License: apache-2.0
- Created: 2021-12-20T12:36:31.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2021-12-31T17:43:35.000Z (about 4 years ago)
- Last Synced: 2025-06-25T05:43:26.273Z (7 months ago)
- Topics: gin, go, golang, openapi, swagger
- Language: Go
- Homepage:
- Size: 28.3 KB
- Stars: 191
- Watchers: 7
- Forks: 14
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## go-fastapi
[](https://pkg.go.dev/github.com/sashabaranov/go-fastapi)
[](https://goreportcard.com/report/github.com/sashabaranov/go-fastapi)
go-fastapi is a library to quickly build APIs. It is inspired by Python's popular [FastAPI](https://github.com/tiangolo/fastapi) library.
Features:
* Auto-generated OpenAPI/Swagger schema without any markup
* Declare handlers using types, not just `Context`
* Based on [gin](https://github.com/gin-gonic/gin) framework
Installation: `go get github.com/sashabaranov/go-fastapi`
## Example
```go
package main
import (
"github.com/gin-gonic/gin"
"github.com/sashabaranov/go-fastapi"
)
type EchoInput struct {
Phrase string `json:"phrase"`
}
type EchoOutput struct {
OriginalInput EchoInput `json:"original_input"`
}
func EchoHandler(ctx *gin.Context, in EchoInput) (out EchoOutput, err error) {
out.OriginalInput = in
return
}
func main() {
r := gin.Default()
myRouter := fastapi.NewRouter()
myRouter.AddCall("/echo", EchoHandler)
r.POST("/api/*path", myRouter.GinHandler) // must have *path parameter
r.Run()
}
// Try it:
// $ curl -H "Content-Type: application/json" -X POST --data '{"phrase": "hello"}' localhost:8080/api/echo
// {"response":{"original_input":{"phrase":"hello"}}}
```
To generate OpenAPI/Swagger schema:
```go
myRouter := fastapi.NewRouter()
myRouter.AddCall("/echo", EchoHandler)
swagger := myRouter.EmitOpenAPIDefinition()
swagger.Info.Title = "My awesome API"
jsonBytes, _ := json.MarshalIndent(swagger, "", " ")
fmt.Println(string(jsonBytes))
```