github.com/AngusLu/go-swagger@v0.28.0/README.md (about)

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