github.com/emreu/go-swagger@v0.22.1/README.md (about)

     1  # Swagger 2.0 [![Build Status](https://circleci.com/gh/go-swagger/go-swagger.svg?style=shield)](https://circleci.com/gh/go-swagger/go-swagger) [![Build status](https://ci.appveyor.com/api/projects/status/x377t5o9ennm847o/branch/master?svg=true)](https://ci.appveyor.com/project/casualjim/go-swagger/branch/master) [![codecov](https://codecov.io/gh/go-swagger/go-swagger/branch/master/graph/badge.svg)](https://codecov.io/gh/go-swagger/go-swagger) [![GitHub version](https://badge.fury.io/gh/go-swagger%2Fgo-swagger.svg)](https://badge.fury.io/gh/go-swagger%2Fgo-swagger)
     2  [![Slack Status](https://slackin.goswagger.io/badge.svg)](https://slackin.goswagger.io)
     3  [![license](http://img.shields.io/badge/license-Apache%20v2-orange.svg)](https://raw.githubusercontent.com/swagger-api/swagger-spec/master/LICENSE)
     4  [![GoDoc](https://godoc.org/github.com/go-swagger/go-swagger?status.svg)](http://godoc.org/github.com/go-swagger/go-swagger)
     5  [![Docker Repository on Quay](https://quay.io/repository/goswagger/swagger/status "Docker Repository on Quay")](https://quay.io/repository/goswagger/swagger)
     6  [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fgo-swagger%2Fgo-swagger.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fgo-swagger%2Fgo-swagger?ref=badge_shield)
     7  [![GolangCI](https://golangci.com/badges/github.com/go-swagger/go-swagger.svg)](https://golangci.com)
     8  [![Go Report Card](https://goreportcard.com/badge/github.com/go-swagger/go-swagger)](https://goreportcard.com/report/github.com/go-swagger/go-swagger)
     9  
    10  This package contains a golang implementation of Swagger 2.0 (aka [OpenAPI 2.0](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md)):
    11  it knows how to serialize and deserialize swagger specifications.
    12  
    13  [Swagger](https://swagger.io/) is a simple yet powerful representation of your RESTful API.<br>
    14  
    15  > ![swagger](https://raw.githubusercontent.com/go-swagger/go-swagger/master/docs/favicon-16x16.png) **Swagger in a nutshell**
    16  >
    17  > 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.
    18  >
    19  > With a Swagger-enabled API, you get interactive documentation, client SDK generation and discoverability. We created Swagger to help fulfill the promise of APIs.
    20  >
    21  > 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.
    22  
    23  ##  Features
    24  `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.
    25  
    26  * Generates a server from a swagger specification
    27  * Generates a client from a swagger specification
    28  * Supports most features offered by jsonschema and swagger, including polymorphism
    29  * Generates a swagger specification from annotated go code
    30  * Additional tools to work with a swagger spec
    31  * Great customization features, with vendor extensions and customizable templates
    32  
    33  Our focus with code generation is to produce idiomatic, fast go code, which plays nice with golint, go vet etc.
    34  
    35  ##  Project status
    36  `go-swagger` is now feature complete and has stabilized its API.
    37  
    38  Most features and building blocks are now in a stable state, with a rich set of CI tests.
    39  
    40  The go-openapi community actively continues bringing fixes and enhancements to this code base.
    41  
    42  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](https://slackin.goswagger.io).
    43  
    44  ## Documentation
    45  <https://goswagger.io>
    46  
    47  ## FAQ
    48  Q&A contributed by the community:
    49  
    50  <https://goswagger.io/faq/>
    51  
    52  ## How is this different from go generator in swagger-codegen?
    53  **tl;dr** The main difference at this moment is that this one actually works...
    54  
    55  The swagger-codegen project only generates a _workable_ go client and even there it will only support flat models.
    56  Further, the go server generated by swagger-codegen is mostly a stub.
    57  
    58  > **Motivation**
    59  > Why is this not done as a part of the swagger-codegen project? Because:
    60  >
    61  > * 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.
    62  > * Go's super limited type system makes it so that it doesn't fit well in the model of swagger-codegen
    63  > * Go's idea of polymorphism doesn't reconcile very well with a solution designed for languages that actually have inheritance and so forth.
    64  > * For supporting types like `[][][]map[string][][]int64` I don't think it's possible with mustache
    65  >
    66  > I gravely underestimated the amount of work that would be involved in making something useful out of it.
    67  > 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)
    68  
    69  ## What's inside?
    70  
    71  Here is an outline of available features (see the full list [here](https://goswagger.io/features.html)):
    72  
    73  - An object model that serializes swagger-compliant yaml or json
    74  - A tool to work with swagger
    75    - Serve swagger UI for any swagger spec file
    76    - Flexible code generation, with customizable templates
    77      - Generate go API server based on swagger spec
    78      - Generate go API client from a swagger spec
    79    -  Validate a swagger spec document, with extra rules outlined [here](https://github.com/apigee-127/sway/blob/master/docs/README.md#semantic-validation)
    80    -  Generate a spec document based on annotated code
    81  - A runtime to work with Rest API and middlewares
    82    - Serve spec
    83    - Routing
    84    - Validation
    85    - Authorization
    86    - Swagger docs UI
    87    - A Diff tool which will cause a build to fail if a change in the spec breaks backwards compatibility
    88  
    89  There is more to that...
    90  
    91  - A [typed JSON Schema implementation](https://goswagger.io/use/model.html), supporting most Draft 4 features
    92  - Extended string and numeric formats: [strfmt](https://github.com/go-openapi/strfmt)
    93  - Utilities to work with JSON, convert data types and pointers: [swag](https://github.com/go-openapi/swag)
    94  - A jsonschema (Draft 4) validator, with full $ref support: [validate](https://github.com/go-openapi/validate)
    95  - Custom validation interface
    96  
    97  ## Installing
    98  `go-swagger` is available as binary or docker releases as well as from source: [more details](https://goswagger.io/install.html).
    99  
   100  ## Use-cases
   101  The main package of the toolkit, go-swagger/go-swagger, provides command line tools to help working with swagger.
   102  
   103  The toolkit is highly customizable and allows endless possibilities to work with OpenAPI2.0 specifications.
   104  
   105  Beside the go-swagger CLI tool and generator, the [go-openapi packages](https://github.com/go-openapi) provide modular functionality to build custom solutions on top of OpenAPI.
   106  
   107  The CLI supports shell autocompletion utilities: see [here](https://goswagger.io/cli_helpers.html).
   108  
   109  ### Serve specification UI
   110  Most basic use-case: serve a UI for your spec:
   111  
   112  ```
   113  swagger serve https://raw.githubusercontent.com/swagger-api/swagger-spec/master/examples/v2.0/json/petstore-expanded.json
   114  ```
   115  
   116  ### Validate a specification
   117  To [validate](https://goswagger.io/usage/validate.html) a Swagger specification:
   118  
   119  ```
   120  swagger validate https://raw.githubusercontent.com/swagger-api/swagger-spec/master/examples/v2.0/json/petstore-expanded.json
   121  ```
   122  
   123  ### Generate an API server
   124  To generate a [server for a swagger spec](https://goswagger.io/generate/server.html) document:
   125  
   126  ```
   127  swagger generate server [-f ./swagger.json] -A [application-name [--principal [principal-name]]
   128  ```
   129  
   130  ### Generate an API client
   131  To generate a [client for a swagger spec](https://goswagger.io/generate/client.html) document:
   132  
   133  ```
   134  swagger generate client [-f ./swagger.json] -A [application-name [--principal [principal-name]]
   135  ```
   136  
   137  ### Generate a spec from source
   138  To generate a [swagger spec document for a go application](https://goswagger.io/generate/spec.html):
   139  
   140  ```
   141  swagger generate spec -o ./swagger.json
   142  ```
   143  
   144  ### Generate a data model
   145  To generate model structures and validators exposed by the API:
   146  
   147  ```
   148  swagger generate model --spec={spec}
   149  ```
   150  
   151  ### Transform specs
   152  
   153  There are [several commands](https://goswagger.io/use/transform.html) allowing you to transform your spec.
   154  
   155  Resolve and expand $ref's in your spec as inline definitions:
   156  ```
   157  swagger expand {spec}
   158  ```
   159  
   160  Flatten your spec: all external $ref's are imported into the main document and inline schemas reorganized as definitions.
   161  ```
   162  swagger flatten {spec}
   163  ```
   164  
   165  Merge specifications (composition):
   166  ```
   167  swagger mixin {spec1} {spec2}
   168  ```
   169  
   170  ### Compare specs
   171  
   172  The  diff command allows you to check backwards compatibility.
   173  Type ```swagger diff --help``` for info.
   174  
   175  ```
   176  swagger diff {spec1} {spec2}
   177  ```
   178  
   179  ## Try it
   180  
   181  Try `go-swagger` in a free online workspace using Gitpod:
   182  
   183  [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io#https://github.com/go-swagger/go-swagger)
   184  
   185  ## Licensing
   186  
   187  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.
   188  
   189  
   190  [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fgo-swagger%2Fgo-swagger.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fgo-swagger%2Fgo-swagger?ref=badge_large)
   191  
   192  ## Who is using this project?
   193  
   194  To name but a few... (feel free to sign in there if you are using this project):
   195  
   196  > 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`:
   197  
   198  [3DSIM](https://github.com/3DSIM)  
   199  [Alibaba PouchAPI](https://github.com/alibaba/pouch)  
   200  [CheckR](https://github.com/checkr/flagr)  
   201  [Cilium](https://github.com/cilium/cilium)  
   202  [CoreOS](https://github.com/coreos/go-quay)  
   203  [DigitalOcean](https://github.com/digitalocean/go-netbox)  
   204  [EVE Central](https://github.com/evecentral)  
   205  Iron.io
   206  [JaegerTracing](https://github.com/jaegertracing/jaeger)  
   207  [Kubernetes-Helm](https://github.com/kubernetes-helm/monocular)  
   208  [Kubernetes](https://godoc.org/k8s.io/apiextensions-apiserver/pkg/apiserver)  
   209  [ManifoldCo](https://github.com/manifoldco)  
   210  [Metaparticle.io](https://github.com/metaparticle-io/metaparticle-ast)  
   211  [Netlify](https://github.com/netlify/open-api)  
   212  [Nutanix](https://github.com/nutanix)  
   213  [OAS2](https://github.com/hypnoglow/oas2)  
   214  [OVH API](https://github.com/appscode/go-ovh)  
   215  [RackHD](https://github.com/RackHD/RackHD)  
   216  [ScaleFT](https://github.com/authclub/billforward)  
   217  [StratoScale](https://github.com/Stratoscale/swagger)  
   218  [Terraform Provider OpenAPI](https://github.com/dikhan/terraform-provider-openapi)  
   219  [VMWare](https://github.com/vmware/dispatch)  
   220  ...
   221  
   222  ## Note to users migrating from older releases
   223  
   224  ### Using 0.5.0
   225  
   226  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.
   227  
   228  ### Migrating from 0.5.0 to 0.6.0
   229  
   230  You will have to rename some imports:
   231  
   232  ```
   233  github.com/go-swagger/go-swagger/httpkit/validate to github.com/go-openapi/validate
   234  github.com/go-swagger/go-swagger/httpkit to github.com/go-openapi/runtime
   235  github.com/naoina/denco to github.com/go-openapi/runtime/middleware/denco
   236  github.com/go-swagger/go-swagger to github.com/go-openapi
   237  ```
   238  
   239  ### Migrating from 0.12 to 0.13
   240  
   241  Spec flattening and $ref resolution brought breaking changes in model generation, since all complex things generate their own definitions.
   242  
   243  ### Migrating from 0.14 to 0.15
   244  
   245  Generated servers no more import the following package (replaced by go1.8 native functionality):
   246  ```
   247  github.com/tylerb/graceful
   248  ```
   249  
   250  Spec flattening now defaults to minimal changes to models and should be workable for 0.12 users.
   251  
   252  Users who prefer to stick to 0.13 and 0.14 default flattening mode may now use the `--with-flatten=full` option.
   253  
   254  Note that the `--skip-flatten` option has been phased out and replaced by the more explicit `--with-expand` option.