Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 56 additions & 2 deletions modules/swagger-codegen/src/main/resources/go/README.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,22 @@ Put the package under your project folder and add the following in import:
"./{{packageName}}"
```

## New Client
```
client, err := {{packageName}}.NewClient(*http.Client, userAgent string)
```

One client should be created that will serve as an agent for all requests. This allows http2 multiplexing and keep-alive be used to optimize connections.
It is also good manners to provide a user-agent describing the point of use of the API.

```
client, err := {{packageName}}.NewClient(nil, "{{packageName}} client http://mysite.com")
result, response, err := client.Endpoint.Operation(requiredParam, map[string]interface{} {
"optionalParam1": "stringParam",
"optionalParam2": 1234.56
})
```

## Documentation for API Endpoints

All URIs are relative to *{{basePath}}*
Expand All @@ -48,18 +64,56 @@ Class | Method | HTTP request | Description
- **Location**: {{#isKeyInQuery}}URL query string{{/isKeyInQuery}}{{#isKeyInHeader}}HTTP header{{/isKeyInHeader}}
{{/isApiKey}}
{{#isBasic}}- **Type**: HTTP basic authentication
For basic authentication, a username and password are provided to each operation through a context.

```
auth := {{packageName}}.BasicAuth{Username: "user", Password: "pass"}
client, err := {{packageName}}.NewClient(nil, "{{packageName}} client http://mysite.com")
ctx := context.WithValue(context.TODO(), {{packageName}}.ContextBasicAuth, auth)
result, response, err := client.Endpoint.AuthenticatedOperation( ctx,
requiredParam,
map[string]interface{} {
"optionalParam1": "stringParam",
"optionalParam2": 1234.56
})
```

{{/isBasic}}
{{#isOAuth}}- **Type**: OAuth
- **Flow**: {{{flow}}}
- **Authorizatoin URL**: {{{authorizationUrl}}}
- **Authorization URL**: {{{authorizationUrl}}}
- **Scopes**: {{^scopes}}N/A{{/scopes}}
{{#scopes}} - **{{{scope}}}**: {{{description}}}
{{/scopes}}

Example:
```
auth, err = oauth2conf.TokenSource(http.Client, token) // Access and Refresh token structure

client, err := {{packageName}}.NewClient(nil, "{{packageName}} client http://mysite.com")
ctx := context.WithValue(context.TODO(), {{packageName}}.ContextOAuth2, auth)
result, response, err := client.Endpoint.AuthenticatedOperation( ctx,
requiredParam,
map[string]interface{} {
"optionalParam1": "stringParam",
"optionalParam2": 1234.56
})
```

{{/isOAuth}}

{{/authMethods}}

## Author

{{#apiInfo}}{{#apis}}{{^hasMore}}{{infoEmail}}
{{/hasMore}}{{/apis}}{{/apiInfo}}


## Credits
https://github.com/go-resty/resty (MIT license) Copyright © 2015-2016 Jeevanandam M (jeeva@myjeeva.com)
- Uses modified setBody and detectContentType

https://github.com/gregjones/httpcache (MIT license) Copyright © 2012 Greg Jones (greg.jones@gmail.com)
- Uses parseCacheControl and CacheExpires as a helper function


156 changes: 63 additions & 93 deletions modules/swagger-codegen/src/main/resources/go/api.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -4,91 +4,55 @@ package {{packageName}}
{{#operations}}
import (
"net/url"
"net/http"
"strings"
"errors"
"golang.org/x/net/context"
{{#imports}} "{{import}}"
{{/imports}}
)

type {{classname}} struct {
Configuration *Configuration
}

func New{{classname}}() *{{classname}} {
configuration := NewConfiguration()
return &{{classname}}{
Configuration: configuration,
}
}
var _ context.Context

func New{{classname}}WithBasePath(basePath string) *{{classname}} {
configuration := NewConfiguration()
configuration.BasePath = basePath
type {{classname}}Service service

return &{{classname}}{
Configuration: configuration,
}
}
{{#operation}}

/**
* {{summary}}{{#notes}}
* {{notes}}{{/notes}}
*
{{#allParams}}{{#required}} * @param {{paramName}} {{description}}
{{/required}}{{/allParams}}{{#hasOptionalParams}} * @param optional (nil or map[string]interface{}) with one or more of:
{{#allParams}}{{^required}} * @param "{{paramName}}" ({{dataType}}) {{description}}
{{/required}}{{/allParams}}{{/hasOptionalParams}} * @return {{#returnType}}{{^isListContainer}}*{{/isListContainer}}{{{returnType}}}{{/returnType}}
*/
func (a {{{classname}}}) {{{nickname}}}({{#allParams}}{{#required}}{{paramName}} {{{dataType}}}{{#hasMore}}, {{/hasMore}}{{/required}}{{/allParams}}{{#hasOptionalParams}}localVarOptionals map[string]interface{}{{/hasOptionalParams}}) ({{#returnType}}{{^isListContainer}}*{{/isListContainer}}{{{returnType}}}, {{/returnType}}*APIResponse, error) {

var localVarHttpMethod = strings.ToUpper("{{httpMethod}}")
// {{{classname}}}Service {{summary}}{{#notes}}
// {{notes}}{{/notes}}
//
//{{#authMethods}} * @param ctx context.Context Authentication Context {{/authMethods}}
//{{#allParams}}{{#required}} @param {{paramName}} {{description}}
//{{/required}}{{/allParams}}{{#hasOptionalParams}} @param optional (nil or map[string]interface{}) with one or more of:
//{{#allParams}}{{^required}} @param "{{paramName}}" ({{dataType}}) {{description}}
//{{/required}}{{/allParams}}{{/hasOptionalParams}} @return {{#returnType}}{{{returnType}}}{{/returnType}}
func (a {{{classname}}}Service) {{{nickname}}}({{#authMethods}}ctx context.Context, {{/authMethods}}{{#allParams}}{{#required}}{{paramName}} {{{dataType}}}{{#hasMore}}, {{/hasMore}}{{/required}}{{/allParams}}{{#hasOptionalParams}}localVarOptionals map[string]interface{}{{/hasOptionalParams}}) ({{#returnType}}{{{returnType}}}, {{/returnType}} *http.Response, error) {
var (
localVarHttpMethod = strings.ToUpper("{{httpMethod}}")
localVarPostBody interface{}
localVarFileName string
localVarFileBytes []byte
{{#returnType}}
successPayload {{returnType}}
{{/returnType}}
)

// create path and map variables
localVarPath := a.Configuration.BasePath + "{{path}}"{{#pathParams}}
localVarPath := "{{{basePath}}}{{path}}"{{#pathParams}}
localVarPath = strings.Replace(localVarPath, "{"+"{{baseName}}"+"}", fmt.Sprintf("%v", {{paramName}}), -1){{/pathParams}}

localVarHeaderParams := make(map[string]string)
localVarQueryParams := url.Values{}
localVarFormParams := make(map[string]string)
var localVarPostBody interface{}
var localVarFileName string
var localVarFileBytes []byte
{{#authMethods}}
// authentication '({{name}})' required
{{#isApiKey}}
{{#isKeyInHeader}}
// set key with prefix in header
localVarHeaderParams["{{keyParamName}}"] = a.Configuration.GetAPIKeyWithPrefix("{{keyParamName}}")
{{/isKeyInHeader}}
{{#isKeyInQuery}}
// set key with prefix in query string
localVarQueryParams["{{keyParamName}}"] = a.Configuration.GetAPIKeyWithPrefix("{{keyParamName}}")
{{/isKeyInQuery}}
{{/isApiKey}}
{{#isBasic}}
// http basic authentication required
if a.Configuration.UserName != "" || a.Configuration.Password != ""{
localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString()
}
{{/isBasic}}
{{#isOAuth}}
// oauth required
if a.Configuration.AccessToken != ""{
localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken
}
{{/isOAuth}}
{{/authMethods}}
// add default headers if any
for key := range a.Configuration.DefaultHeader {
localVarHeaderParams[key] = a.Configuration.DefaultHeader[key]
}
localVarFormParams := url.Values{}

{{#hasQueryParams}}
{{#queryParams}}
{{#required}}
localVarQueryParams.Add("{{baseName}}", a.Configuration.APIClient.ParameterToString({{paramName}}, "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}"))
localVarQueryParams.Add("{{baseName}}", parameterToString({{paramName}}, "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}"))
{{/required}}
{{^required}}
if localVarTempParam, localVarOk := localVarOptionals["{{paramName}}"].({{dataType}}); localVarOptionals != nil && localVarOk {
localVarQueryParams.Add("{{baseName}}", a.Configuration.APIClient.ParameterToString(localVarTempParam, "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}"))
if localVarTempParam, localVarOk := localVarOptionals["{{paramName}}"].({{dataType}}); localVarOk {
localVarQueryParams.Add("{{baseName}}", parameterToString(localVarTempParam, "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}"))
}
{{/required}}
{{/queryParams}}
Expand All @@ -98,10 +62,11 @@ func (a {{{classname}}}) {{{nickname}}}({{#allParams}}{{#required}}{{paramName}}
localVarHttpContentTypes := []string{ {{#consumes}}"{{{mediaType}}}", {{/consumes}} }

// set Content-Type header
localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes)
localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
if localVarHttpContentType != "" {
localVarHeaderParams["Content-Type"] = localVarHttpContentType
}

// to determine the Accept header
localVarHttpHeaderAccepts := []string{
{{#produces}}
Expand All @@ -110,18 +75,18 @@ func (a {{{classname}}}) {{{nickname}}}({{#allParams}}{{#required}}{{paramName}}
}

// set Accept header
localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts)
localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
if localVarHttpHeaderAccept != "" {
localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
}
{{#hasHeaderParams}}
{{#headerParams}}
{{#required}}
localVarHeaderParams["{{baseName}}"] = a.Configuration.APIClient.ParameterToString({{paramName}}, "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}")
localVarHeaderParams["{{baseName}}"] = parameterToString({{paramName}}, "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}")
{{/required}}
{{^required}}
if localVarTempParam, localVarOk := localVarOptionals["{{paramName}}"].({{dataType}}); localVarOptionals != nil && localVarOk {
localVarHeaderParams["{{baseName}}"] = a.Configuration.APIClient.ParameterToString(localVarTempParam, "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}")
if localVarTempParam, localVarOk := localVarOptionals["{{paramName}}"].({{dataType}}); localVarOk {
localVarHeaderParams["{{baseName}}"] = parameterToString(localVarTempParam, "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}")
}
{{/required}}
{{/headerParams}}
Expand All @@ -131,23 +96,24 @@ func (a {{{classname}}}) {{{nickname}}}({{#allParams}}{{#required}}{{paramName}}
{{#isFile}}
{{^required}}
var file ({{dataType}})
if localVarTempParam, localVarOk := localVarOptionals["{{paramName}}"].({{dataType}}); localVarOptionals != nil && localVarOk {
if localVarTempParam, localVarOk := localVarOptionals["{{paramName}}"].({{dataType}}); localVarOk {
file = localVarTempParam
}
{{/required}}
if file != nil {
fbs, _ := ioutil.ReadAll(file)
localVarFileBytes = fbs
localVarFileName = file.Name()
file.Close()
}
{{/isFile}}
{{^isFile}}
{{#required}}
localVarFormParams["{{baseName}}"] = a.Configuration.APIClient.ParameterToString({{paramName}}, "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}")
localVarFormParams.Add("{{baseName}}", parameterToString({{paramName}}, "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}"))
{{/required}}
{{^required}}
if localVarTempParam, localVarOk := localVarOptionals["{{paramName}}"].({{dataType}}); localVarOptionals != nil && localVarOk {
localVarFormParams["{{baseName}}"] = a.Configuration.APIClient.ParameterToString(localVarTempParam, "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}")
if localVarTempParam, localVarOk := localVarOptionals["{{paramName}}"].({{dataType}}); localVarOk {
localVarFormParams.Add("{{baseName}}", parameterToString(localVarTempParam, "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}"))
}
{{/required}}
{{/isFile}}
Expand All @@ -156,33 +122,37 @@ func (a {{{classname}}}) {{{nickname}}}({{#allParams}}{{#required}}{{paramName}}
{{#hasBodyParam}}
{{#bodyParams}} // body params
{{#required}}
localVarPostBody = &{{paramName}}{{/required}}
localVarPostBody = &{{paramName}}
{{/required}}
{{^required}}
if localVarTempParam, localVarOk := localVarOptionals["{{paramName}}"].({{dataType}}); localVarOptionals != nil && localVarOk {
if localVarTempParam, localVarOk := localVarOptionals["{{paramName}}"].({{dataType}}); localVarOk {
localVarPostBody = &localVarTempParam
}
{{/required}}
{{/bodyParams}}
{{/hasBodyParam}}

r, err := a.client.prepareRequest({{#authMethods}}ctx{{/authMethods}}{{^authMethods}}nil{{/authMethods}}, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
if err != nil {
return {{#returnType}}successPayload, {{/returnType}}nil, err
}

localVarHttpResponse, err := a.client.callAPI(r)
if err != nil || localVarHttpResponse == nil {
return {{#returnType}}successPayload, {{/returnType}}localVarHttpResponse, err
}
defer localVarHttpResponse.Body.Close()
if localVarHttpResponse.StatusCode >= 300 {
return {{#returnType}}successPayload, {{/returnType}}localVarHttpResponse, errors.New(localVarHttpResponse.Status)
}
{{#returnType}}
var successPayload = new({{returnType}})
{{/returnType}}
localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)

var localVarURL, _ = url.Parse(localVarPath)
localVarURL.RawQuery = localVarQueryParams.Encode()
var localVarAPIResponse = &APIResponse{Operation: "{{operationId}}", Method: localVarHttpMethod, RequestURL: localVarURL.String()}
if localVarHttpResponse != nil {
localVarAPIResponse.Response = localVarHttpResponse.RawResponse
localVarAPIResponse.Payload = localVarHttpResponse.Body()

if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil {
return {{#returnType}}successPayload, {{/returnType}}localVarHttpResponse, err
}

if err != nil {
return {{#returnType}}{{#isListContainer}}*{{/isListContainer}}successPayload, {{/returnType}}localVarAPIResponse, err
}
{{#returnType}}
err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload)
{{/returnType}}
return {{#returnType}}{{#isListContainer}}*{{/isListContainer}}successPayload, {{/returnType}}localVarAPIResponse, err

return {{#returnType}}successPayload, {{/returnType}}localVarHttpResponse, err
}
{{/operation}}{{/operations}}
Loading