Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.6.1 to 1.7.0. - [Release notes](https://github.com/stretchr/testify/releases) - [Commits](https://github.com/stretchr/testify/compare/v1.6.1...v1.7.0) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
Generate a swagger dynamically based on the types used to handle request and response.
It works with gorilla-mux and uses kin-openapi to automatically generate and serve a swagger file.
To convert struct to schemas, we use jsonschema library.
The struct must contains the appropriate struct tags to be inserted in json schema to generate the schema dynamically.
It is always possible to add a totally custom swagger schema using kin-openapi
Usage
An example usage of this lib:
context := context.Background()
r := mux.NewRouter()
router, _ := swagger.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{}},
},
},
},
})
carSchema := openapi3.NewObjectSchema().WithProperties(map[string]*openapi3.Schema{
"foo": openapi3.NewStringSchema(),
"bar": openapi3.NewIntegerSchema().WithMax(15).WithMin(5),
})
requestBody := openapi3.NewRequestBody().WithJSONSchema(carSchema)
operation := swagger.NewOperation()
operation.AddRequestBody(requestBody)
router.AddRawRoute(http.MethodPost, "/cars", okHandler, operation)
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. -
How to add a swagger with
anyOf? You can create manually a swagger withanyOfusing theAddRawRoutemethod. -
How to add a swagger with
oneOf? You can create manually a swagger withoneOfusing theAddRawRoutemethod, or use the jsonschema struct tag.
Discovered unsupported schema features
Formats:
uuidis unsupported by kin-openapi
Versioning
We use [SemVer][semver] for versioning. For the versions available, see the tags on this repository.