9 Kasım 2022 Çarşamba

openapi-generator plugin

Giriş
Open API içeren yaml dosyasından kod üretir. Yaml dosyasını Swagger Editor ile düzenleriz.
Kod üretmek için şöyle yaparız
mvn clean compile
generatorName Alanı
Spring için kod üreteceksek spring değeri verilir.
Örnek
Şöyle yaparız
<plugin>
  <groupId>org.openapitools</groupId>
  <artifactId>openapi-generator-maven-plugin</artifactId>
  <version>5.1.0</version>
  <executions>
    <execution>
      <goals>
        <goal>generate</goal>
      </goals>
      <id>buildApi</id>
      <configuration>

        <!-- specify the location of specification file here -->
        <inputSpec>${basedir}/src/main/resources/open-api.yaml</inputSpec>
                
        <generatorName>spring</generatorName>
        <generateApis>true</generateApis>
        <generateModels>true</generateModels>

        <configOptions>
          <generateSupportingFiles>true</generateSupportingFiles>
          <library>spring-boot</library>
          <interfaceOnly>true</interfaceOnly>
          <useBeanValidation>true</useBeanValidation>
          <sourceFolder>/src/main/java</sourceFolder>
          <implFolder>/src/main/java</implFolder>
          <serializableModel>true</serializableModel>
          <java8>true</java8>
        </configOptions>
      </configuration>
    </execution>
  </executions>
</plugin>
Örnek open-api.yaml dosyası şöyle
openapi: 3.0.3 # version of the specification
info:
  version: '1'
  title: Open API Generator Spring Boot Example

servers:
  - url: http://localhost:8080

paths:
  /parents:
    get:
      summary: return parents information
      operationId: getParents
      responses:
        200:
          description: General parents information
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ParentResponse'

components:
  schemas:
    ParentResponse:
      discriminator:
        propertyName: ParentResponseType
        mapping:
          Parent: '#/components/schemas/Parent'
      type: object
      properties:
        status:
          type: string
        errorMessage:
          type: string
      description: Response of the parent.

    Parent:
      allOf:
        - $ref: '#/components/schemas/ParentResponse'
        - type: object
          properties:
            parentId:
              type: integer
              description: The ID of the parent
              format: int64
            parentName:
              type: string
              example: 'Stephen'
Üretilen kod şöyle
org.openapitools.api
 ApiUtil
  ParentsApi
org.openapitools.model
  Parent
  ParentAllOf
  ParentResponse

inputSpec Alanı
yaml dosyasının yerini belirtir

Örnek
Şöyle yaparız
<plugin>
  <groupId>org.openapitools</groupId>
  <artifactId>openapi-generator-maven-plugin</artifactId>
  <version>6.1.0</version>
  <executions>
    <execution>
      <goals>
        <goal>generate</goal>
      </goals>
      <configuration>
        <inputSpec>
          ${project.basedir}/src/main/resources/employee.yaml
        </inputSpec>
        <generatorName>spring</generatorName>
        <apiPackage>org.SwaggerCodeGenExample.api</apiPackage>
        <modelPackage>org.SwaggerCodeGenExample.model</modelPackage>
        <configOptions>
          <interfaceOnly>true</interfaceOnly>
        </configOptions>
      </configuration>
    </execution>
  </executions>
</plugin>
üretilen kodun derlenmesi için şu dependency listesi gerekir
<dependencies>
  <dependency>
    <groupId>io.swagger.core.v3</groupId>
    <artifactId>swagger-annotations</artifactId>
    <version>2.2.2</version>
  </dependency>
  <dependency>
    <groupId>org.openapitools</groupId>
    <artifactId>jackson-databind-nullable</artifactId>
    <version>0.2.2</version>
  </dependency>
  <dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.1.Final</version>
  </dependency>
</dependencies>
Üretilen kod /target/generated-sources/openapi dizinindedir. Kod sadece interface'lerden ibarettir. Daha sonra kendi sınıfımızı üretilen arayüzden kalıtırız. Şöyle yaparız
@RestController
public class EmployeeController implements EmployeeApi {

  @Override
  public ResponseEntity<String> addEmployee(@Valid Employee employee) {
    ...
  }

  @Override
  public ResponseEntity<List<Employee>> getEmployees() {
    ...
  }
}


Hiç yorum yok:

Yorum Gönder

Local Snapshot Kullanmak

Örnek Şöyle yaparız <repository> <id>snapshot-repository</id> <name>Maven2 Snapshot Repository</name> &l...