mirror of
https://github.com/davidebianchi/gswagger.git
synced 2025-12-23 23:38:43 -05:00
56684e181fa4115e0f95cc06ec240118490ec0c8
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). -
How to add a swagger with
allOf? You can create manually a swagger withallOfusing theAddRawRoutemethod.
Discovered unsupported schema features
Formats:
uuidis unsupported by kin-openapi
Languages
Go
99.3%
Makefile
0.7%