[JAVA] Einführung in Spring Boot x Offene API ~ Offene API, erstellt mit Generationslückenmuster ~

Hintergrund

Teilnahme an der Java-Community-Veranstaltung "JJUG CCC 2019 Fall". Die Geschichte der Erstellung einer supereinfachen OpenAPI, inspiriert vom Inhalt der "API-Serverentwicklung mit OpenAPI Specification 3.0, die nicht Swagger ist", die ich dort gehört habe. (Flach)

Dieses Ziel

Schreiben Sie die Open API mit Spring Boot

Entwicklungsablauf mit OpenAPI (ungefähr)

image.png

Regel: ** Generationslückenmuster ** → Bearbeiten Sie die automatisch generierte Klassendatei nicht.

1. Bereiten Sie die API-Definitionsdatei vor

Verwenden Sie das Beispiel in OAS (OpenAPISpecification)

https://github.com/OAI/OpenAPI-Specification/blob/master/examples/v3.0/petstore.yaml

2. Automatische Codegenerierung aus der Definition

Verwenden Sie das Plugin von Gradle [openapi-generator-gradle-plugin]. Gradle-Plug-In, das automatisch Code aus der API-Definitionsdatei generiert.

build.gradle


plugins {
	id "org.openapi.generator" version "4.2.1"
}
Punkt 1: Einstellungen zur Kompilierungszeit

Legen Sie fest, dass beim Kompilieren automatisch generierte Klassendateien eingeschlossen werden sollen

build.gradle


compileJava.dependsOn tasks.openApiGenerate
sourceSets.main.java.srcDir "${openApiGenerate.outputDir.get()}/src/main/java"
sourceSets.main.resources.srcDir 
Punkt 2: Openapi Generator Einstellungen

Fast eine Kopie des Ausführungsbeispiels des openapi-generator-gradle-plugins ist in Ordnung. Bearbeiten Sie einfach die Konfigurationsdatei, um eine Schnittstelle zu erstellen.

build.gradle


//https://github.com/OpenAPITools/openapi-generator/tree/master/modules/openapi-generator-gradle-plugin

openApiGenerate {
    generatorName = "spring"
    //Konfigurationseinstellungen
    configFile = "$rootDir/specs/config.json".toString()
    //Beispiel-API-Spezifikation
    inputSpec = "$rootDir/specs/petstore-v3.0.yaml".toString()
    outputDir = "$buildDir/generated".toString()
    apiPackage = "org.openapi.example.api"
    invokerPackage = "org.openapi.example.invoker"
    modelPackage = "org.openapi.example.model"
    configOptions = [
        dateLibrary: "java8"
    ]
    systemProperties = [
        modelDocs: 'false'
    ]
}

config.json


{
  "interfaceOnly": true
}

Die automatische Klassengenerierung ist mit Gradles Aufgabe [openApiGenerate] in Ordnung.

スクリーンショット 2019-11-24 9.40.36.png

Wenn die Aufgabe ausgeführt wird, wird automatisch die folgende Java-Datei generiert

image.png

3. API-Implementierung

Generieren Sie einen Controller, indem Sie ihn über eine automatisch generierte Schnittstelle implementieren

PetsApiController.java


@RestController
public class PetsApiController implements PetsApi{
	@Override
	public ResponseEntity<List<Pet>> listPets(@Valid Integer limit) {
		System.out.println("Here list pet");
		return new ResponseEntity<>(HttpStatus.OK);
	}
}

Komplett! !!

Code abgeschlossen

https://github.com/harutotanabe09/SpringBootOpenAPIBegin

Bonus: Ich habe versucht, das OpenAPI-Dokumentationstool zu verwenden

Dokumente werden automatisch mit dem OpenAPI-Dokumententool (Redoc) generiert.

docker run -it --rm -p 80:80 \
  -v $(pwd)/specs/petstore-v3.0.yaml:/usr/share/nginx/html/swagger.yaml \
  redocly/redoc

http://localhost/

Ausgabebild: Ausgabe von API-Parametern und Rückgabewerten auf einem übersichtlichen Bildschirm basierend auf der Definitionsdatei

image.png

Referenzmaterial

API-Serverentwicklung mit OpenAPI Specification 3.0, nicht Swagger https://www.slideshare.net/techblogyahoo/swagger-openapi-specification-30-api

Recommended Posts

Einführung in Spring Boot x Offene API ~ Offene API, erstellt mit Generationslückenmuster ~
[Einführung in Spring Boot] Authentifizierungsfunktion mit Spring Security
Einführung in Spring Boot ~ ~ DI ~
Einführung in Spring Boot ② ~ AOP ~
Einführung in Spring Boot Teil 1
[Einführung in Spring Boot] Überprüfung der Formularvalidierung
Verwenden Sie den Cache mit EhCashe 2.x mit Spring Boot
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
Verwendung des eingebauten h2db mit Federstiefel
Versuchen Sie, die Anmeldefunktion mit Spring Boot zu implementieren
Einführung in Spring Boot + In-Memory Data Grid
[Java] Hallo Welt mit Java 14 x Spring Boot 2.3 x JUnit 5 ~
Versuchen Sie, die Migration mit Spring Boot Flyway zu automatisieren
[Java] Artikel zum Hinzufügen einer Validierung mit Spring Boot 2.3.1.
Ich wollte Spring Boot in einem Multiprojekt gradle
Einstellungen für die Verbindung zu MySQL mit Spring Boot + Spring JDBC
Ordnen Sie DTO automatisch Entitäten mit der Spring Boot-API zu
Ein Memorandum über die Sucht nach Spring Boot2 x Doma2
SSO mit GitHub OAuth in der Spring Boot 1.5.x-Umgebung
[Einführung in Spring Boot] Senden Sie ein Formular mit thymeleaf
Nginx + Spring Boot Papagei Return LineBot mit VPS gemacht
Booten nach Umgebung mit Spring Boot of Maven
Versuch, SSR Vue.js mit Spring Boot und GraalJS zu verwenden
Verbinden Sie Spring Boot und Angular typsicher mit OpenAPI Generator
Mit Spring Boot herunterladen
Geben Sie das integrierte Tomcat-Zugriffsprotokoll mit Spring Boot an die Standardausgabe aus
Schneiden Sie SQL in die Eigenschaftendatei mit jdbcTemplate von Spring Boot aus
Bis INSERT und SELECT für Postgres mit Spring Boot und Thymianblatt
Stellen Sie mit spring boot + spring jpa eine Verbindung zur Datenbank her und führen Sie die CRUD-Operation durch
Fluss bis zur Ausgabe von Tabellendaten, die mit Spring Boot angezeigt werden sollen
Ich habe versucht, mit Swagger mit Spring Boot zu beginnen
Einführung der Bibliothek ff4j, die Feature Toggle mit Spring Boot realisiert
Versuchen Sie Spring Boot von 0 bis 100.
Generieren Sie mit Spring Boot einen Barcode
Implementieren Sie GraphQL mit Spring Boot
Beginnen Sie mit Spring Boot
Einführung in Ratpack (7) - Guice & Spring
Hallo Welt mit Spring Boot!
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Generationslücke mit neuen Ingenieuren
Spring Boot beginnend mit Docker
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
So realisieren Sie mit TERASOLUNA 5.x (= Spring MVC) das Hochladen großer Dateien
02. Ich habe eine API erstellt, um eine Verbindung von Spring Boot zu MySQL (My Batis) herzustellen.
So erstellen Sie mit Spring Boot einen eigenen Controller, der / error entspricht
Ich habe ein einfaches Suchformular mit Spring Boot + GitHub Search API erstellt.
Beispielcode zum Testen eines Spring Boot-Controllers mit MockMvc
Verwenden Sie die Standardauthentifizierung mit Spring Boot
gRPC auf Spring Boot mit grpc-spring-boot-Starter
Erstellen Sie eine App mit Spring Boot 2
Hot Deploy mit Spring Boot-Entwicklung