Skip to content

Instantly share code, notes, and snippets.

@appkr
Last active January 15, 2024 08:22
Show Gist options
  • Select an option

  • Save appkr/fa2ed27d51563d983bb3942b49d145ea to your computer and use it in GitHub Desktop.

Select an option

Save appkr/fa2ed27d51563d983bb3942b49d145ea to your computer and use it in GitHub Desktop.
OpenAPI Generator (a.k.a. Swagger Codegen)
openapi-generator version
openapi-generator help
openapi-generator list
openapi-generator help generate
openapi-generator generate -g spring -i api.yml -o build/spring_server

openapi-generator generate -g php -i api.yml -o build/php_client

openapi-generator generate -g javascript -i api.yml -o build/js_client

Help

$ java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar help

Config

$ java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar config-help -l php
config description
sortParamsByRequiredFlag Sort method arguments to place required parameters before optional parameters. (Default: true)
ensureUniqueParams Whether to ensure parameter names are unique in an operation (rename parameters that are not). (Default: true)
allowUnicodeIdentifiers boolean, toggles whether unicode identifiers are allowed in names or not, default is false (Default: false)
prependFormOrBodyParameters Add form or body parameters to the beginning of the parameter list. (Default: false)
modelPackage package for generated models
apiPackage package for generated api classes
variableNamingConvention naming convention of variable name, e.g. camelCase. (Default: snake_case)
invokerPackage The main namespace to use for all classes. e.g. Yay\Pets
packagePath The main package name for classes. e.g. GeneratedPetstore
srcBasePath The directory under packagePath to serve as source root.
composerVendorName The vendor name used in the composer package name. The template uses {{composerVendorName}}/{{composerProjectName}} for the composer package name. e.g. yaypets. IMPORTANT NOTE (2016/03): composerVendorName will be deprecated and replaced by gitUserId in the next openapi-generator release
gitUserId Git user ID, e.g. openapitools.
composerProjectName The project name used in the composer package name. The template uses {{composerVendorName}}/{{composerProjectName}} for the composer package name. e.g. petstore-client. IMPORTANT NOTE (2016/03): composerProjectName will be deprecated and replaced by gitRepoId in the next openapi-generator release
gitRepoId Git repo ID, e.g. openapi-generator.
artifactVersion The version to use in the composer package version field. e.g. 1.2.3
hideGenerationTimestamp boolean, toggles whether unicode identifiers are allowed in names or not, default is false (Default: true)
{
    "variableNamingConvention": "camelCase",
    "packagePath": "meshkorea/prime-mpos-api",
    "invokerPackage": "Mesh\\PrimeMposApi",
    "modelPackage": "Model",
    "apiPackage": "Service",
    "srcBasePath": "src/",
    "gitUserId": "meshkorea",
    "gitRepoId": "prime-mpos-api",
    "composerVendorName": "meshkorea",
    "composerProjectName": "prime-mpos-api"
}

Generate

$ java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar generate \
	-g php \
	-c ./config-php.json \
	-i ./prime-mpos-api.oas.v3.json \
	-o dist/dist-php

$ java \
  -D{optionName}={optionValue} \
  -Dmodels=User,Pet \
  -Dapis=UserApi \
  -DmodelDocs=false \
  -DmodelTests=false \
  -DapiTests=false \
  -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar \
  #swagger command and options
# api.yml

paths:
  /pets:
    get:
      operationId: listPets
      tags:
        - pet
      responses:
        '200':
          content:
            application/json:
              properties: {}
      parameters:
        - name: query
          in: query
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/PetSearchParam'

components:
  schemas:
    PetSearchParam:
      type: object
      properties:
        name:
          type: string
        ageFrom:
          type: integer
          format: int32
        ageTo:
          type: integer
          format: int32
        page:
          type: integer
          format: int64
        size:
          type: integer
          format: int64

The above spec produces

// Spring server example

public class PetApiDelegateImpl implements PetApiDelegate {
    public ResponseEntity<ListPetsResponse> listPets(PetSearchParam query) {
        return ResponseEntity.ok.build();
    }
}
// PHP client example

class PetApiTest extends TestCase
{
    private $api;

    protected function setUp()
    {
        $this->api = new PetApi();
    }

    public function testPetApi()
    {
        $param = new PetSearchParam([
            'name' => 'foo',
            'page' => 1,
            'size' => 20
        ]);
        $this->api->listPets($param);
    }
}
GET /v1/pets?query=%7B%0A%20%20%20%20%22name%22%3A%20%22foo%22%2C%0A%20%20%20%20%22page%22%3A%201%2C%0A%20%20%20%20%22size%22%3A%2020%0A%7D
/v1/pets?query={\n    \"name\": \"foo\",\n    \"page\": 1,\n    \"size\": 20\n}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment