[JAVA] Connectez Spring Boot et Angular en toute sécurité avec OpenAPI Generator

Cet article est une version mise à niveau des articles précédents suivants. Connexion de Spring Boot et Angular2 à un type sécurisé

C'était un problème

J'avais peur que le backend Web et le frontend Web communiquaient vaguement avec JSON. Je voulais détecter autant que possible les problèmes lors de la construction. Je voulais être capable de communiquer en toute sécurité comme RPC.

Diverses mises à niveau de version de la configuration précédente

Vieux Nouveau
langue du backend Java8 Java11
backend framework Spring Boot 1 Spring Boot 2
frontend framework Angular5 Angular7
Outil de génération de code Swagger Codegen OpenAPI Generator

OpenAPI Generator et Swagger Codegen sont des outils qui génèrent du code client et du code de stub de serveur en fonction des spécifications de l'API REST. Malheureusement, le fonctionnement de Swagger Codegen? Le générateur OpenAPI est né après avoir été forké par un contributeur majeur. Actuellement, OpenAPI Generator a plus de commits et de contributeurs. Cette fois, je suis passé à OpenAPI Generator.

Ce que j'ai fait

Ceci est un projet modèle. https://github.com/chibat/spring-openapi-angular-starter

Structure du projet

Le fichier OpenAPI Spec est automatiquement généré par SpringFox et n'a pas besoin d'être créé manuellement.

Flux de développement

Prenons comme exemple une application d'ajout simple incluse dans le projet de modèle.

1. Création d'un backend Web

Les backends Web sont créés avec Spring Boot. C'est une classe Controller qui reçoit simplement deux entiers dans une demande, les ajoute et répond.

package app.backend.web;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import lombok.Value;

@RestController
public class CalculatorController {

    @PostMapping("/rest/api/add")
    @ApiOperation(value = "", tags = "calculator", nickname = "add")
    public Response add(@RequestBody final Request request) {
        return new Response(request.getArg1() + request.getArg2());
    }

    @Data
    public static class Request {
        private Integer arg1;
        private Integer arg2;
    }

    @Value
    public static class Response {
        private final Integer result;
    }
}

Il convient de noter que l'annotation ApiOperation utilise le nom de classe du client qui génère la chaîne spécifiée par les balises et la chaîne spécifiée par nickname comme nom de méthode. De plus, le pseudonyme est traité comme un operationId d'OpenAPI Spec, et il semble être inutile à moins qu'il ne soit unique dans son ensemble.

2. Génération de code client Web frontal

Effectue des tâches Gradle et génère du code client.

$ cd backend
$ ./gradlew openApiGenerate

Le test est exécuté et les spécifications d'API générées par SpringFox sont sorties dans un fichier. OpenAPI Generator lit le fichier et génère le code client.

La dépendance à SpringFox est uniquement destinée aux tests et n'augmente pas la taille de l'application au moment de l'exécution.

3. Création d'un frontal Web

Les interfaces Web sont créées dans Angular. Créez une classe Component qui utilise le code client généré. CalculatorService est une classe générée automatiquement.

import { Component } from '@angular/core';
import { CalculatorService } from './client/api/calculator.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {

  arg1: number;
  arg2: number;
  result: number;

  constructor(private  calculatorService: CalculatorService) {
  }

  add() {
    if (this.arg1 || this.arg2) {
      this.calculatorService
        .add({arg1: this.arg1, arg2: this.arg2})
        .subscribe(data => this.result = data.result);
    }
  }
}

Résumé

Générateur OpenAPI Bon. Le code angulaire généré est également bon. Comme mentionné ci-dessus, veuillez profiter d'une vie de type confortable et sûre.

Le livre électronique d'OpenAPI Generator est maintenant en vente! (Ajouté le 19/09/2019)

Un livre électronique d'OpenAPI Generator a été publié. Si vous êtes intéressé, pourquoi ne pas l'acheter?

Introduction à la génération de code pour l'API REST (OpenAPI Generator)

Recommended Posts

Connectez Spring Boot et Angular en toute sécurité avec OpenAPI Generator
Connectez-vous à la base de données avec spring boot + spring jpa et effectuez l'opération CRUD
HTTPS avec Spring Boot et Let's Encrypt
Télécharger avec Spring Boot
Essayez d'utiliser un conteneur DI avec Laravel et Spring Boot
Changer d'environnement avec Spring Boot application.properties et l'annotation @Profile
Essayez d'utiliser OpenID Connect avec Keycloak (application Spring Boot)
Mémo d'utilisation de Spring Security: coopération avec Spring MVC et Boot
Spring Boot avec les paramètres du filtre de sécurité Spring et les points addictifs
Tentative de SSR Vue.js avec Spring Boot et GraalJS
Générer un code à barres avec Spring Boot
Hello World avec Spring Boot
Implémenter GraphQL avec Spring Boot
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
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
Créer un micro service avec Spring Boot
Gérez l'API de date et d'heure Java 8 avec Thymeleaf avec Spring Boot
Implémenter l'API REST avec Spring Boot et JPA (Application Layer)
Implémenter l'API REST avec Spring Boot et JPA (couche d'infrastructure)
Jusqu'à INSERT et SELECT sur Postgres avec botte de printemps et feuille de thym
Implémenter l'API REST avec Spring Boot et JPA (Domain Layer Edition)
Développement piloté par domaine avec Java et Spring Boot-Layer et division de modules
Développement facile d'applications Web avec STS et Spring Boot. Dans 10 minutes.
Utiliser l'authentification de base avec Spring Boot
Introduction à Spring Boot x Open API ~ Open API créée avec le modèle d'écart de génération ~
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
Liaison de base de données avec doma2 (Spring boot)
Programmation Spring Boot avec VS Code
Créer une application d'enquête avec Spring Boot
Obtenez des résultats de validation avec Spring Boot
Comparez Hello, world! Avec Spring Boot avec Java, Kotlin et Groovy
(Intellij) Hello World avec Spring Boot
Créez une application avec Spring Boot
Fonction de profil Spring et application Spring Boot.
Google Cloud Platform avec Spring Boot 2.0.0
[Java] Intégration LINE avec Spring Boot
Image de l'application Spring Boot à l'aide de jib-maven-plugin et lancez-la avec Docker
À partir de Spring Boot 0. Utilisez Spring CLI
J'ai essayé Flyway avec Spring Boot
La coopération des messages a commencé avec Spring Boot
Méthode d'implémentation pour source multi-données avec Spring boot (Mybatis et Spring Data JPA)
Traitement lors du démarrage d'une application avec Spring Boot
Spring avec Kotorin --2 RestController et Data Class
Hello World avec Eclipse + Spring Boot + Maven
Envoyez des notifications régulières avec LineNotify + Spring Boot
Effectuer un test de confirmation de transaction avec Spring Boot
Essayez d'utiliser Spring Boot avec VS Code
Lancez l'application Nginx + Spring Boot avec docker-compose
J'ai essayé l'initialisation paresseuse avec Spring Boot 2.2.0