mirror of
https://github.com/davidebianchi/gswagger.git
synced 2025-12-23 23:38:43 -05:00
223a535b8980fdf3e2e189518ffaa533b1c3aa24
gorilla swagger
Initial test&try to generate a swagger dynamically.
It uses gorilla-mux and kin-openapi to automatically generate and serve a swagger file.
To convert struct to schemas, we use this library. The struct should contains the appropriate struct tags to be inserted in json schema.
Usage
An example usage of this lib:
context := context.Background()
r := mux.NewRouter()
router, _ := gswagger.NewRouter(r, gswagger.Options{
Context: context,
Openapi: &openapi3.Swagger{
Info: &openapi3.Info{
Title: "my swagger title",
Version: "1.0.0",
},
},
})
okHandler := func(w http.ResponseWriter, req *http.Request) {
w.WriteHeader(http.StatusOK)
w.Write([]byte("OK"))
}
router.AddRoute(http.MethodPost, "/users", okHandler, Definitions{
RequestBody: &gswagger.ContentValue{
Content: gswagger.Content{
"application/json": {Value: User{}},
},
},
Responses: map[int]gswagger.ContentValue{
201: {
Content: gswagger.Content{
"text/html": {Value: ""},
},
},
401: {
Content: gswagger.Content{
"application/json": {Value: &errorResponse{}},
},
Description: "invalid request",
},
},
})
router.AddRoute(http.MethodGet, "/users", okHandler, Definitions{
Responses: map[int]ContentValue{
200: {
Content: Content{
"application/json": {Value: &Users{}},
},
},
},
})
router.AddRoute(http.MethodGet, "/employees", okHandler, Definitions{
Responses: map[int]ContentValue{
200: {
Content: Content{
"application/json": {Value: &Employees{}},
},
},
},
})
This configuration will output the schema shown here
FAQ
- How to add format
binary? Formatsdate-time,email,hostname,ipv4,ipv6,uricould be added with tagjsonschema. Others format could be added with tagjsonschema_extra. Not all the formats are supported (see discovered unsupported formats here).
Discovered unsupported schema features
Formats:
uuidis unsupported by kin-openapi
Languages
Go
99.3%
Makefile
0.7%