[JAVA] Introduction à Spring Boot x Open API ~ Open API créée avec le modèle d'écart de génération ~

Contexte

Participation à l'événement communautaire Java "JJUG CCC 2019 Fall". L'histoire de la création d'un OpenAPI super simple inspiré du contenu du "développement de serveur API utilisant la spécification OpenAPI 3.0 qui n'est pas Swagger" que j'ai entendu là-bas. (Peu profond)

Ce but

Écrire une API ouverte à l'aide de Spring Boot

Flux de développement utilisant OpenAPI (en gros)

image.png

Règle: ** Modèle d'écart de génération ** → Ne modifiez pas le fichier de classe généré automatiquement.

1. Préparez le fichier de définition d'API

Utiliser l'exemple dans OAS (OpenAPISpecification)

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

2. Génération automatique de code à partir de la définition

Utilisez le plug-in de Gradle [openapi-generator-gradle-plugin]. Plug-in Gradle qui génère automatiquement du code à partir du fichier de définition d'API.

build.gradle


plugins {
	id "org.openapi.generator" version "4.2.1"
}
Point 1: Paramètres au moment de la compilation

Défini pour inclure les fichiers de classe générés automatiquement au moment de la compilation

build.gradle


compileJava.dependsOn tasks.openApiGenerate
sourceSets.main.java.srcDir "${openApiGenerate.outputDir.get()}/src/main/java"
sourceSets.main.resources.srcDir 
Point 2: Paramètres d'Openapi Generator

Presque une copie de l'exemple d'exécution de openapi-generator-gradle-plugin est OK. Manipulez simplement le fichier de configuration pour créer une interface.

build.gradle


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

openApiGenerate {
    generatorName = "spring"
    //Paramètres de configuration
    configFile = "$rootDir/specs/config.json".toString()
    //Exemple de spécification d'API
    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
}

La génération automatique de classe est OK avec la tâche de Gradle [openApiGenerate].

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

Lorsque la tâche est exécutée, le fichier Java suivant est automatiquement généré

image.png

3. Implémentation de l'API

Générer un contrôleur en implémentant à partir d'une interface générée automatiquement

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);
	}
}

Achevée! !!

Code complété

https://github.com/harutotanabe09/SpringBootOpenAPIBegin

Bonus: j'ai essayé d'utiliser l'outil de documentation OpenAPI

Les documents sont automatiquement générés à l'aide de l'outil de document OpenAPI (redoc).

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

http://localhost/

Image de sortie: affichez les paramètres d'API et renvoyez les valeurs sur un écran facile à lire basé sur le fichier de définition

image.png

Matériel de référence

Développement de serveur API avec la spécification OpenAPI 3.0, pas Swagger https://www.slideshare.net/techblogyahoo/swagger-openapi-specification-30-api

Recommended Posts

Introduction à Spring Boot x Open API ~ Open API créée avec le modèle d'écart de génération ~
[Introduction à Spring Boot] Fonction d'authentification avec Spring Security
Introduction à Spring Boot ① ~ DI ~
Introduction à Spring Boot ② ~ AOP ~
Introduction à Spring Boot, partie 1
[Introduction à Spring Boot] Vérification de la validation du formulaire
Utiliser le cache avec EhCashe 2.x avec Spring Boot
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Comment utiliser h2db intégré avec Spring Boot
Essayez d'implémenter la fonction de connexion avec Spring Boot
Introduction à Spring Boot + In-Memory Data Grid
[Java] Hello World avec Java 14 x Spring Boot 2.3 x JUnit 5 ~
Essayez d'automatiser la migration avec Spring Boot Flyway
[Java] Article pour ajouter une validation avec Spring Boot 2.3.1.
Je voulais classer la botte à ressort dans un multi-projet
Paramètres de connexion à MySQL avec Spring Boot + Spring JDBC
Mappez automatiquement DTO aux entités avec l'API Spring Boot
Un mémorandum de dépendance à Spring Boot2 x Doma2
SSO avec GitHub OAuth dans l'environnement Spring Boot 1.5.x
[Introduction à Spring Boot] Soumettez un formulaire à l'aide de thymeleaf
Nginx + Spring Boot Parrot Return LineBot fait avec VPS
Comment démarrer par environnement avec Spring Boot de Maven
Tentative de SSR Vue.js avec Spring Boot et GraalJS
Connectez Spring Boot et Angular en toute sécurité avec OpenAPI Generator
Télécharger avec Spring Boot
Sortez le journal d'accès Tomcat intégré à la sortie standard avec Spring Boot
Découpez SQL en fichier de propriété avec jdbcTemplate of spring boot
Jusqu'à INSERT et SELECT sur Postgres avec botte de printemps et feuille de thym
Connectez-vous à la base de données avec spring boot + spring jpa et effectuez l'opération CRUD
Flux jusqu'à la sortie des données de la table à afficher avec Spring Boot
J'ai essayé de démarrer avec Swagger en utilisant Spring Boot
Introduction de la bibliothèque ff4j qui réalise le basculement de fonctionnalités avec Spring Boot
Essayez Spring Boot de 0 à 100.
Générer un code à barres avec Spring Boot
Implémenter GraphQL avec Spring Boot
Démarrez avec Spring Boot
Introduction à Ratpack (7) --Guice & Spring
Bonjour tout le monde avec Spring Boot!
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Écart de génération avec les nouveaux ingénieurs
Spring Boot à partir de Docker
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
Créer un micro service avec Spring Boot
Envoyer du courrier avec Spring Boot
Comment réaliser un téléchargement de fichiers volumineux avec TERASOLUNA 5.x (= Spring MVC)
02. J'ai créé une API pour me connecter de Spring Boot à MySQL (My Batis)
Comment créer votre propre contrôleur correspondant à / error avec Spring Boot
J'ai créé un formulaire de recherche simple avec Spring Boot + GitHub Search API.
Exemple de code pour le test unitaire d'un contrôleur Spring Boot avec MockMvc
Utiliser l'authentification de base avec Spring Boot
gRPC sur Spring Boot avec grpc-spring-boot-starter
Créez une application avec Spring Boot 2
Déploiement à chaud avec le développement Spring Boot