[JAVA] Ich habe versucht, mit Swagger mit Spring Boot zu beginnen

Sie sind verantwortlich für das Backend und das Frontend innerhalb des Teams. Ich werde für die Vorderseite verantwortlich sein.

Ich wollte, dass Sie zuerst nur die API vorbereiten. Als ich versuchte, Swagger zu verwenden, war das viel einfacher.

Nach der Untersuchung der Verwendung scheint es viele Möglichkeiten zu geben, dies zu tun. Ich beschloss, es aufzuschreiben, einschließlich des Arrangements. Dieses Mal werde ich Spring Boot verwenden, um das Designdokument mit einem Bottom-up-Ansatz zu transkribieren.

Bottom-up-Ansatz: Transkribieren aus dem Quellcode

Der Bottom-up-Ansatz besteht darin, einen Swagger basierend auf dem Quellcode zu erstellen. Die folgenden zwei Punkte beziehen sich auf den Bottom-up-Ansatz.

――Da das Entwurfsdokument basierend auf dem Quellcode fertiggestellt wird, wird es für das Dokument und den Code schwierig, voneinander abzuweichen. ――Vermeiden Sie das mühsame Schreiben des Quellcodes nach dem Erstellen des Designdokuments

Es gibt eine Geschichte wie "Ist es nicht ein Problem, wenn eine Überarbeitung stattfindet?" Da zuerst nur der Mund der API definiert wird, Ich denke, dass sich die Arbeitszeit nicht wesentlich von der Erstellung als Dokument unterscheidet.

Als ich diesmal nachgesehen habe, scheint es, dass die meisten Dinge mit Spring Boot und Swagger erledigt werden können Ich wollte es in Zukunft positiv nutzen.

Den diesmal erstellten Code finden Sie unter hier.

Spring Boot-Einstellungen

Einführung von Spring Fox

Bei Verwendung von Spring Fox wird das API-Designdokument aus dem Quellcode transkribiert.

Um Spring Fox zu installieren, können Sie die folgenden Abhängigkeiten lösen.

build.gradle


repositories {
  jcenter()
}

dependencies {
    compile "io.springfox:springfox-swagger2:2.9.2"
    compile 'io.springfox:springfox-swagger-ui:2.9.2'  //So verwenden Sie die Swagger-Benutzeroberfläche
}

Aktivieren Sie Spring Fox im Spring Boot

SpringBootSwaggerApplication.java


package com.example.springbootswagger;

//Importanweisung weggelassen

@SpringBootApplication
@EnableSwagger2
public class SpringBootSwaggerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootSwaggerApplication.class, args);
    }

    //Docket ist eine von Spring Fox bereitgestellte API. Erfordert Einstellungen zum Transkribieren mit Swagger
    @Bean
    public Docket petApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select() // ApiSelector :Wählen Sie die API aus, die mit Swagger transkribiert werden soll.
                    .paths(PathSelectors.ant("/pets/**")) //Swagger weckt nur alles auf, was dem angegebenen Pfad entspricht
                    .build() //Erstellen Sie ApiSelector
                .useDefaultResponseMessages(false) //Es weist automatisch einen undefinierten Statuscode zu. Deaktivieren Sie dieses Mal die automatische Gewährung
                .host("springbootswagger.example.com")
                .apiInfo(apiInfo()); //API-Informationen festlegen
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Pet Service")
                .description("This is a pet service api")
                .version("1.0.0")
                .build();
    }
}

Wenn Sie sich den offiziellen Leitfaden ansehen, gibt es andere Einstellungen, die eine allgemeine Antwortnachricht zurückgeben. Sie können sicherheitsrelevante Einstellungen vornehmen. Dieses Mal wird das Volumen groß sein, also werde ich es weglassen.

Bei der Aufnahme in die Produktion müssen Anzeigebeschränkungen festgelegt werden. Wie machst du das? Lass es uns das nächste Mal ausprobieren.

Ich werde eine Anmerkung setzen

Nachdem die Einstellungen für Spring Boot und Spring Fox abgeschlossen wurden, lassen Sie Swagger sie tatsächlich transkribieren. Kommentieren Sie verschiedene Ressourcen.

Wenn Sie im einfachsten Zustand wie folgt schreiben, können Sie die Spezifikationen vorerst sehen.

PetResource.java


package com.example.springbootswagger;
//Importanweisung weggelassen

@RestController
@RequestMapping("/pets")
public class PetResource {

    @GetMapping
    public List<Map<String, String>> pets() {
        return new ArrayList<>();
    }

    @GetMapping("{id}")
    public Map<String, String> pet(@PathVariable String id) {
        return new HashMap<>();
    }

    @PutMapping("{id}")
    public void updatePet(@PathVariable String id) {
        return;
    }

    @PostMapping
    public int insertPet() {
        return 1;
    }

    @DeleteMapping
    public void deletePet() {
        return;
    }
}


Wenn Sie eine Anmerkung hinzufügen, die an jede Ressource der API angehängt werden soll, wird normalerweise Es transkribiert es einfach in Swagger. Es ist wunderbar.

So überprüfen Sie die Swagger-Benutzeroberfläche

Wenn Sie die Anwendung starten und auf "http: // localhost: 8080 / swagger-ui.html" zugreifen Der folgende Bildschirm wird angezeigt.

swagger-ui_list.png

Übrigens, auch wenn Sie "swagger-ui.html" nicht definieren Wenn gradle die Abhängigkeit von io.springfox: springfox-swagger-ui: 2.9.2 auflöst Es scheint, dass es ohne Erlaubnis generiert wird.

Definieren Sie Swagger genauer

Wenn es sich um eine Anmerkung der von Spring bereitgestellten Controller-Ebene handelt, Dies wird sich in Swagger entsprechend widerspiegeln. Wenn Sie beispielsweise @PathVariable hinzufügen, wird dies wie folgt angezeigt.

swagger-ui_path-variable.png

Es gibt auch wesentliche Elemente. Wenn Sie anstelle von Spring eine von Swagger bereitgestellte Anmerkung hinzufügen, Ein benutzerfreundlicheres API-Designdokument wird erstellt.

Geben Sie einen Überblick über jede Ressource

PetResource.java


//Importanweisung weggelassen

@RestController
@RequestMapping("/pets")
public class PetResource {

    // @Ressourcenübersicht mit ApiOperation festlegen
    @ApiOperation(value = "This Resource fetch all reserved pets")
    @GetMapping(produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public List<PetDto> pets() {
        return new ArrayList<>();
    }
}

swagger-ui_description.png

Fügen Sie ein Antwortmuster hinzu

PetResource.java


//Importanweisung weggelassen

@RestController
@RequestMapping("/pets")
public class PetResource {

    @ApiOperation(value = "This Resource fetch a pet by id")
    //Mit ApiResponses können Sie mehrere Antworten definieren. Erforderliche Elemente für Code und Nachricht.
    @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid Id supplied", response = ErrorDto.class), @ApiResponse(code = 404, message = "Pet not found")})
    @GetMapping(value = "{id}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public PetDto pet(@PathVariable String id) {
        return new PetDto();
    }
}

swagger-ui_response.png

Nachwort

Dieses Mal habe ich die sicherheitsrelevanten Elemente aufgrund des Volumens weggelassen. Ich denke, ich werde es in einem anderen Artikel zusammenfassen. Danach ist es, wie ich in der Mitte schrieb, notwendig, etwas zu entwickeln, das in der Produktion nicht gezeigt werden kann. Ich bin gespannt, wie es geht.

Ich verwende SpringBoot. Soll ich also etwas mit Spring Security tun?

Verweise

** Klicken Sie hier für verschiedene Einstellungen bei der Installation. ** **. http://springfox.github.io/springfox/docs/current/#getting-started

** Klicken Sie hier für Swagger-Anmerkungen. ** **. https://github.com/swagger-api/swagger-core/wiki/annotations

Recommended Posts

Ich habe versucht, mit Swagger mit Spring Boot zu beginnen
Ich habe versucht, mit Spring Data JPA zu beginnen
Ich habe versucht, mit Web Assembly zu beginnen
Beginnen Sie mit Spring Boot
Ich habe GraphQL mit Spring Boot ausprobiert
Ich habe Lazy Initialization mit Spring Boot 2.2.0 ausprobiert
Ich habe versucht, mithilfe von JDBC Template mit Spring MVC eine Verbindung zu MySQL herzustellen
Rails-Anfänger haben versucht, mit RSpec zu beginnen
Ich wollte Spring Boot in einem Multiprojekt gradle
Erste Schritte mit Spring Boot
Ich habe versucht, das Hochladen von Dateien mit Spring MVC zu implementieren
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
Ich habe MySQL 5.7 mit Docker-Compose gestartet und versucht, eine Verbindung herzustellen
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren
Ich habe versucht, eine Webanwendung voller Fehler mit Spring Boot zu klonen
Wie fange ich mit schlank an?
Ich habe versucht, Spring + Mybatis + DbUnit zu verwenden
Ich habe versucht, JOOQ mit Gradle zu verwenden
Ich habe versucht, mit Java zu interagieren
Erste Schritte mit JDBC mit PostgresSQL unter MacOS
Die Nachrichtenkooperation begann mit Spring Boot
Ich habe versucht, Realm mit Swift UI zu verwenden
[Hinweis] Erste Schritte mit Rspec
Versuchen Sie es mit Spring Boot mit VS-Code
Ich habe versucht, OnlineConverter mit SpringBoot + JODConverter zu verwenden
Ich habe versucht, OpenCV mit Java + Tomcat zu verwenden
Asynchrone Verarbeitung mit Spring Boot unter Verwendung von @Async
Ich habe es mit Spring versucht.
[Spring Boot] Ich möchte meine eigene Eigenschaftendatei hinzufügen und den Wert mit env.getProperty () abrufen.
Java-Anfänger haben versucht, mit Spring Boot eine einfache Webanwendung zu erstellen
[Hinweis] Ich möchte mit afterLast mit JdbcTemplate in umgekehrter Reihenfolge arbeiten
Ich habe Docker verwendet, um die Vorlage zu verfestigen, die mit Spring Boot entwickelt werden soll.
Ich habe versucht, AdoptOpenJDK 11 (11.0.2) mit dem Docker-Image zu überprüfen
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
Ich habe versucht, die Federbeinkonfiguration mit Coggle zu verwalten
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
Ich habe versucht, Anmeldeinformationen mit JMX zu verwalten
Verwendung des eingebauten h2db mit Federstiefel
Ich habe mit Ruby einen Blackjack gemacht (ich habe versucht, Minitest zu verwenden)
Versuchen Sie, die Anmeldefunktion mit Spring Boot zu implementieren
Ich habe versucht, JavaFX und Spring Framework zu verknüpfen.
Versuchen Sie, die Migration mit Spring Boot Flyway zu automatisieren
[Java] Artikel zum Hinzufügen einer Validierung mit Spring Boot 2.3.1.
Wenden Sie Twitter Bootstrap 4 mithilfe von Webjars auf Spring Boot 2 an
Ich habe versucht, einen Server mit Netty zu implementieren
Ich habe versucht, den Block mit Java zu brechen (1)
[Einführung in Spring Boot] Authentifizierungsfunktion mit Spring Security
Ich habe versucht, mit Gradle auf Heroku zu beginnen
[Java] Ich habe versucht, über den Verbindungspool eine Verbindung mit Servlet (Tomcat) & MySQL & Java herzustellen
Teil 2 Teil II. So fahren Sie mit den ersten Schritten fort Spring Referenzhandbuch Note Hinweis ①
[Ich habe es versucht] Spring Tutorial
Ich habe versucht, Gson zu benutzen
Ich habe versucht, TestNG zu verwenden
Ich habe Spring Batch ausprobiert
Ich habe versucht, Galasa zu benutzen
Beginnen Sie mit Gradle
Mit Spring Boot herunterladen
Einstellungen für die Verbindung zu MySQL mit Spring Boot + Spring JDBC