Cet article est une version mise à niveau des articles précédents suivants. Connexion de Spring Boot et Angular2 à un type sécurisé
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.
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.
Ceci est un projet modèle. https://github.com/chibat/spring-openapi-angular-starter
Le fichier OpenAPI Spec est automatiquement généré par SpringFox et n'a pas besoin d'être créé manuellement.
Prenons comme exemple une application d'ajout simple incluse dans le projet de modèle.
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.
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.
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);
}
}
}
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.
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