This package contains a golang implementation of Swagger 2.0 (aka OpenAPI 2.0):
it knows how to serialize and deserialize swagger specifications.
Swagger is a simple yet powerful representation of your RESTful API.
Swagger in a nutshell
With the largest ecosystem of API tooling on the planet, thousands of developers are supporting Swagger in almost every modern programming language and deployment environment.
With a Swagger-enabled API, you get interactive documentation, client SDK generation and discoverability. We created Swagger to help fulfill the promise of APIs.
Swagger helps companies like Apigee, Getty Images, Intuit, LivingSocial, McKesson, Microsoft, Morningstar, and PayPal build the best possible services with RESTful APIs. Now in version 2.0, Swagger is more enabling than ever. And it's 100% open source software.
Features
go-swagger brings to the go community a complete suite of fully-featured, high-performance, API components to work with a Swagger API: server, client and data model.
Generates a server from a swagger specification
Generates a client from a swagger specification
Generates a CLI (command line tool) from a swagger specification (alpha stage)
Supports most features offered by jsonschema and swagger, including polymorphism
Generates a swagger specification from annotated go code
Additional tools to work with a swagger spec
Great customization features, with vendor extensions and customizable templates
Our focus with code generation is to produce idiomatic, fast go code, which plays nice with golint, go vet etc.
Project status
go-swagger is now feature complete and has stabilized its API.
Most features and building blocks are now in a stable state, with a rich set of CI tests.
The go-openapi community actively continues bringing fixes and enhancements to this code base.
There is still much room for improvement: contributors and PR's are welcome. You may also get in touch with maintainers on our slack channel.
How is this different from go generator in swagger-codegen?
tl;dr The main difference at this moment is that this one actually works...
The swagger-codegen project only generates a workable go client and even there it will only support flat models.
Further, the go server generated by swagger-codegen is mostly a stub.
Motivation
Why is this not done as a part of the swagger-codegen project? Because:
I don't really know java very well and so I'd be learning both java and the object model of the codegen which was in heavy flux as opposed to doing go and I really wanted to go experience of designing a large codebase with it.
Go's super limited type system makes it so that it doesn't fit well in the model of swagger-codegen
Go's idea of polymorphism doesn't reconcile very well with a solution designed for languages that actually have inheritance and so forth.
For supporting types like [][][]map[string][][]int64 I don't think it's possible with mustache
I gravely underestimated the amount of work that would be involved in making something useful out of it.
My personal mission: I want the jvm to go away, it was great way back when now it's just silly (vm in container on vm in vm in container)
What's inside?
Here is an outline of available features (see the full list here):
An object model that serializes swagger-compliant yaml or json
A tool to work with swagger
Serve swagger UI for any swagger spec file
Flexible code generation, with customizable templates
Generate go API server based on swagger spec
Generate go API client from a swagger spec
Validate a swagger spec document, with extra rules outlined here
Generate a spec document based on annotated code
A runtime to work with Rest API and middlewares
Serve spec
Routing
Validation
Authorization
Swagger docs UI
A Diff tool which will cause a build to fail if a change in the spec breaks backwards compatibility
Try go-swagger in a free online workspace using Gitpod:
Licensing
The toolkit itself is licensed as Apache Software License 2.0. Just like swagger, this does not cover code generated by the toolkit. That code is entirely yours to license however you see fit.
Who is using this project?
To name but a few... (feel free to sign in there if you are using this project):
In the list below, we tried to figure out the public repos where you'll find examples on how to use go-swagger and go-openapi:
Changes in the behavior of the generated client regarding defaults in parameters and response headers:
default values for parameters are no more hydrated by default and sent over the wire
(assuming the server uses defaults).
the previous behavior (explicitly sending defaults over the wire) can be obtained
with the SetDefaults() and WithDefaults() parameter methods.
the body parameter is not pre-hydrated with the default from it schema
default values for response headers are hydrated when the header is not received
(previously, headers remained with their zero value)
Migrating from 0.24 to 0.25
The options for generate model --all-definitions and --skip-struct are marked for deprecation.
For now, the CLI continues to accept these options. They will be removed in a future version.
Generating all definitions is now the default behavior when no other option filters the generation scope.
The --skip-struct option had no effect.
Migrating from 0.14 to 0.15
Generated servers no more import the following package (replaced by go1.8 native functionality):
github.com/tylerb/graceful
Spec flattening now defaults to minimal changes to models and should be workable for 0.12 users.
Users who prefer to stick to 0.13 and 0.14 default flattening mode may now use the --with-flatten=full option.
Note that the --skip-flatten option has been phased out and replaced by the more explicit --with-expand option.
Migrating from 0.12 to 0.13
Spec flattening and $ref resolution brought breaking changes in model generation, since all complex things generate their own definitions.
Migrating from 0.5.0 to 0.6.0
You will have to rename some imports:
github.com/go-swagger/go-swagger/httpkit/validate to github.com/go-openapi/validate
github.com/go-swagger/go-swagger/httpkit to github.com/go-openapi/runtime
github.com/naoina/denco to github.com/go-openapi/runtime/middleware/denco
github.com/go-swagger/go-swagger to github.com/go-openapi
Using 0.5.0
Because 0.5.0 and master have diverged significantly, you should checkout the tag 0.5.0 for go-swagger when you use the currently released version.
请发表评论