Skip to content

Come sviluppare un semplice client REST usando Swagger codegen?

Facciamo una revisione esaustiva di ogni dichiarazione nel nostro spazio con l'obiettivo di mostrarti sempre informazioni accurate e aggiornate.

Soluzione:

Sì. È possibile utilizzare swagger-codegen-maven-plugin per generare un client REST. Ma prima è necessario descrivere l'API REST in YAML o JSON in OpenAPI Specification soprattutto perché swagger-codegen-maven-plugin può generare un client REST solo da un file scritto in questa specifica.

Le altre risposte presuppongono che sia necessario scrivere manualmente le specifiche, mentre la mia soluzione fa un passo avanti generando automaticamente le specifiche dal codice sorgente del controllore REST.

L'ultima versione di OpenAPI è la 3.0. Ma in base al pacchetto della vostra annotazione swagger importata, state usando la versione 2.0 (o precedente). Quindi la mia soluzione presuppone che si stia utilizzando OpenAPI 2.0.

Generazione della specifica API aperta

Per prima cosa, si può usare swagger-maven-plugin per generare una specifica OpenAPI dal codice sorgente di RestController. In pratica analizza le annotazioni Swagger annotate nel file @RestController specificate in e scarica le specifiche OpenAPI in /src/main/resources/swagger.json :


    com.github.kongchen
    swagger-maven-plugin
    3.1.5
    
        
            
                true
                
                    com.dgs.spring.springbootswagger.controller.EmployeeController
                    com.dgs.spring.springbootswagger.controller.FooController
                
                
                    http
                
                127.0.0.1:8080
                /
                
                    My API
                    1.1.1
                
                ${basedir}/src/main/resources/
            
        
    
    
        
            
                generate
            
        
    

Eseguire il seguente comando di maven per avviare la generazione:

mvn clean compile

Generazione del client Rest

Dopo swagger.json è stato generato, è possibile copiarlo e incollarlo nel progetto client (ad esempio /src/main/resources/swagger.json). Si può quindi usare swagger-codegen-maven-plugin per generare un client HTTP.

Per impostazione predefinita, viene generato l'intero progetto maven, che include i casi di test e altre documentazioni. Ma quello che voglio è solo il codice sorgente di HttpClient senza altre cose. Dopo vari tentativi ed errori, mi accontento della seguente configurazione:


    io.swagger
    swagger-codegen-maven-plugin
    2.4.7
    
        
            
                generate
            
            
                ${basedir}/src/main/resources/swagger.json
                java
                resttemplate
                ${project.basedir}/target/generated-sources/

                com.example.demo.restclient.api
                com.example.demo.restclient.model
                com.example.demo.restclient

                false
                false
                false
                false
                
                    java8
                    restclient
                
            
        
    

Il client HTTP generato è basato su RestTemplate e sarà generato nella cartella target/generated-sources/restclient. Potrebbe essere necessario configurare l'IDE per importare il client generato, al fine di utilizzarlo. (Nel caso di Eclipse, si può configurare in Proprietà del progetto ➡️ Percorso di compilazione Java ➡️ Aggiungi la cartella del client Rest generato)

Per iniziare a generare il client, basta eseguire il comando maven:

mvn clean compile

Per utilizzare il client HTTP generato :

ApiClient apiClient = new ApiClient();

//Override the default API base path configured in Maven
apiClient.setBasePath("http://api.example.com/api");

EmployeeManagementSystemApi api = new EmployeeManagementSystemApi(apiClient);
api.getEmployeeById(1l);

Nota:

  • Se ci si imbatte in javax/xml/bind/annotation/XmlRootElement durante la generazione quando si utilizza java8+, potrebbe essere necessario fare riferimento a questo.

Aggiornato:

La tua domanda ha trovato risposta in un altro post. Vedere: post correlato

...

Per vostra informazione, un approccio semplice utilizzando la riga di comando:

C'è un buon tutorial su baeldung al riguardo:
come creare un client di riposo con swagger codegen

Ad esempio
Eseguire il comando:

java -jar swagger-codegen-cli.jar generate 
  -i http://mydomain/v2/swagger.json 
  --api-package com.mypackage.api 
  --model-package com.mypackage.model 
  --invoker-package com.mypackage.invoker 
  --group-id com.mygroup 
  --artifact-id spring-swagger-codegen-api-client 
  --artifact-version 0.0.1-SNAPSHOT 
  -l java 
  --library resttemplate 
  -o spring-swagger-codegen-api-client

Swagger Codegen supporta le seguenti implementazioni di client:

  1. jersey1 + Jackson
  2. Jersey2 + Jackson
  3. Fingere + Jackson
  4. OkHttp + Gson
  5. Retrofit2/OkHttp + Gson
  6. Primavera RestTemplate + Jackson
  7. Resteasy + Jackson

P.S. Come si può vedere, il rest client è generato dalla definizione di swagger spec ed è definito con l'argomento "-i".

Endpoint Swagger

Supponiamo che gli endpoint Swagger della vostra applicazione siano accessibili a:

  1. Verifica della documentazione dell'API JSON di Swagger 2.0

    http://localhost:8080/v2/api-docs?group=employee

    http://localhost:8080/v2/api-docs (se non si è impostato un gruppo chiamato employee)

  2. Testare l'interfaccia Swagger

    http://localhost:8080/swagger-ui.html

Scaricare l'eseguibile di Swagger Codegen

È possibile scaricare swagger-codegen-cli-2.4.7.jar dal repository centrale di Maven.

Generazione del codice client

Ora che si dispone del JAR di Swagger Codegen, è possibile generare il client REST eseguendo il seguente comando:

java -jar swagger-codegen-cli-2.4.7.jar generate 
  -i http://localhost:8080/v2/api-docs?group=employee 
  -l java 
  -o swagger-codegen-client

se nessun raggruppamento swagger,

java -jar swagger-codegen-cli-2.4.7.jar generate 
  -i http://localhost:8080/v2/api-docs 
  -l java 
  -o swagger-codegen-client

Opzioni

Sebbene Swagger Codegen CLI sia dotato di una serie di opzioni, utilizzeremo quelle assolutamente necessarie per la
generare il codice client.

  • -i l'URL che punta all'applicazione Swagger api docs.
  • -l il linguaggio di programmazione del client, che in questo caso è java
  • -o la cartella di output per il codice client generato.

Una volta eseguito il comando precedente per la generazione del codice, si dovrebbe notare il seguente messaggio sul terminale:

[main] INFO io.swagger.parser.Swagger20Parser - reading from http://localhost:8080/v2/api-docs?group=employee
[main] WARN io.swagger.codegen.ignore.CodegenIgnoreProcessor - Output directory does not exist, or is inaccessible. No file (.swagger-codegen-ignore) will be evaluated.
[main] INFO io.swagger.codegen.AbstractGenerator - writing file swagger-codegen-client/src/main/java/io/swagger/client/model/Employee.java
[main] INFO io.swagger.codegen.AbstractGenerator - writing file swagger-codegen-client/docs/Employee.md
[main] INFO io.swagger.codegen.AbstractGenerator - writing file swagger-codegen-client/src/main/java/io/swagger/client/api/EmployeeControllerApi.java
...
[main] INFO io.swagger.codegen.AbstractGenerator - writing file swagger-codegen-client/src/main/java/io/swagger/client/ApiClient.java
...

Progetto client REST

Una volta completata la generazione del codice, si dovrebbe notare un messaggio gradle/maven con la seguente struttura:

__ swagger-codegen-client
  |__ README.md
  |__ build.gradle
  |__ build.sbt
  |__ docs
  |__ git_push.sh
  |__ gradle
  |__ gradle.properties
  |__ gradlew
  |__ gradlew.bat
  |__ pom.xml
  |__ settings.gradle
  |__ src
     |__ main
        |__ java
          |__ io.swagger.client.api
             |__ EmployeeControllerApi.java
     |__ test
        |__ java
          |__ io.swagger.client.api
             |__ EmployeeControllerApiTest.java

Un esempio di progetto client generato può essere trovato qui.

Utilizzo del client REST

Il progetto client contiene molte classi java. Tuttavia, la classe più importante è EmployeeControllerApi.java.
È la classe che contiene tutta la logica per creare classi client REST.

L'altra classe importante è EmployeeControllerApiTest.java. Mostra come utilizzare EmployeeControllerApi.java. Il progetto client generato fornisce anche un file README molto utile.

Modifiche agli URL

La classe ApiClient contiene informazioni relative alla creazione di una connessione client HTTP. Assicurarsi che il file basePath
all'applicazione REST è corretta. Nell'esempio generato, l'elemento basePath aveva un https://localhost:8080 invece di http://localhost:8080.

Modifiche a Java 12

Il progetto generato funziona bene con Java 8. Se si utilizza Java 12, è necessario aggiungere le seguenti dipendenze per far compilare il progetto:

    
        javax.xml.bind
        jaxb-api
        2.3.0
    
    
        com.sun.xml.bind
        jaxb-core
        2.3.0
    
    
        com.sun.xml.bind
        jaxb-impl
        2.3.0
    

    
        javax.annotation
        javax.annotation-api
        1.3.2
    

Esempio di chiamata REST

Ecco un esempio di creazione di un file employee effettuando una chiamata al metodo REST POST.

Employee employee = new Employee();
employee.setId(3L);
employee.setFirstName("Sam");
employee.setLastName("Fox");
employee.setEmail("[email protected]");

EmployeeControllerApi api = new EmployeeControllerApi();
Employee response = api.createEmployeeUsingPOST(employee);
System.out.println(response);

Si dovrebbe ottenere una risposta simile a questa:

class Employee {
    email: [email protected]
    firstName: Sam
    id: 3
    lastName: Fox
}

È possibile trovare un esempio completo qui.

Ricorda che puoi condividere questa sezione se hai raggiunto il successo.



Utilizzate il nostro motore di ricerca

Ricerca
Generic filters

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.