Dropwizard è un framework Java open source per il rapido sviluppo di API REST. Dropwizard è una sorta di ecosistema che contiene tutte le dipendenze (come Jersey, jackson o jetty) in bundle in un unico pacchetto o può essere aggiunto come modulo separato. Se non si utilizza dropwizard, si finirà per raccogliere tutte le dipendenze da soli e spesso si verificano problemi di caricamento della classe a causa della mancata corrispondenza della versione tra varie librerie java. Dropwizard risolve questo problema per te e riunisce librerie stabili e mature in un pacchetto semplice e leggero che ti consente di concentrarti su come fare le cose. Impariamo ad usare dropwizard per creare API REST-passo dopo passo.
Table of ContentsLibraries included inside dropwizardSetup dropwizard with mavenCreate REST Application ClassCreate REST Resource and APIsBuild Resource RepresentationsRequest ValidationVerify REST APIs
- Librerie incluse all’interno di dropwizard
- Imposta dropwizard con maven
- Crea classe di applicazione REST
- Crea risorsa REST e API
- Crea rappresentazioni di risorse
- Convalida della richiesta
- Verifica le API REST
- Crea l’applicazione uber jar file
- Avvia l’applicazione in jetty server
- Accedi all’URIhttp://localhost:8080/employees
- URI di accessohttp://localhost:8080/employees/1
- Inviato HTTP PUT http://localhost:8080/employees / 1 con dati di richiesta non validi
- Sent HTTP PUT http://localhost:8080/employees/1 with correct data
Librerie incluse all’interno di dropwizard
Una volta che si include dropwizard nel progetto, si ottengono le seguenti librerie aggiunte al classpath.
- Jersey-Per la creazione di applicazioni web RESTful.
- Jetty – Dropwizard utilizza la libreria HTTP Jetty per incorporare un server HTTP direttamente nel progetto.
- Jackson-Per oggetto da / a conversione JSON. Permette di esportare i modelli di dominio direttamente con annotazioni JAXB.
- Guava-strutture dati immutabili altamente ottimizzate per accelerare lo sviluppo.
- Logback e SLF4j – per la registrazione performante e flessibile.
- Hibernate Validator – un semplice framework dichiarativo per convalidare l’input dell’utente e generare messaggi di errore utili e i18n-friendly.
- Apache HTTPClient – Per l’interazione di basso e alto livello con altri servizi web.
- JDBI – il modo più semplice per utilizzare un database relazionale con Java.
- Liquidbase-per tenere sotto controllo lo schema del database durante tutto il ciclo di sviluppo e rilascio.
- FreeMarker – sistemi di template.
- Baffi-semplici sistemi di template per applicazioni più rivolte all’utente.
- Joda Time-libreria molto completa e sana per la gestione di date e orari.
Imposta dropwizard con maven
Il nostro progetto sarà basato sull’archetipo maven-archetype-quickstart. È possibile creare il progetto utilizzando il prompt dei comandi o utilizzare eclipse per creare un semplice progetto java maven.
mvn archetype:generate -DgroupId=com.howtodoinjava.demo -DartifactId=DropWizardExample -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Il progetto generato avrà anche il file pom.xml
. Aggiungi la dipendenza dropwizard lì.
Questo scaricherà tutti i file jar e li aggiungerà nel tuo classpath. Per aggiungere il supporto di build e package al nostro progetto, useremo il plugin maven-shade, che ci permetterà di confezionare completamente il nostro progetto, insieme alle sue dipendenze, in un singolo file JAR autonomo (Fat/Uber JAR) che può essere distribuito ed eseguito così com’è.
Pom completo.il file xml assomiglia a questo.
Crea classe di applicazione REST
La classe di applicazione è il punto di ingresso per qualsiasi applicazione dropwizard. Deve estendere la classe io.dropwizard.Application
e implementare i metodi initialize(Bootstrap<Configuration>)
e run(Configuration, Environment)
. Preparano l’ambiente di runtime dell’applicazione.
Per richiamare il metodo run, è necessario disporre del metodo public static void main(String args) {}
, che verrà richiamato dal comando java -jar
quando si esegue l’applicazione come file jar.
Per eseguire il file JAR, aggiungiamo l’argomento server al comando che avvia il server HTTP incorporato (Jetty) per eseguire il nostro servizio.
java -jar target\DropWizardExample.jar server
Il server embedded Jetty di Dropwizard proverà a collegarsi alle porte 8080 e 8081 per impostazione predefinita. La porta 8080 viene utilizzata dal server per servire le richieste HTTP in entrata all’applicazione, mentre 8081 viene utilizzata dall’interfaccia di amministrazione di Dropwizard.
Abbiamo anche importato le classi necessarie Logger
e LoggerFactory
per costruire un’istanza di Logger che potremmo usare per le nostre esigenze di registrazione.
Crea risorsa REST e API
Ora, dopo aver aggiunto classe bootstrap applicazione, è ora possibile aggiungere risorse REST contenenti API REST. In questo esempio, ho creato e l’applicazione di gestione dei dipendenti – quindi ha API per creare/aggiornare / eliminare i record dei dipendenti. Questa classe sarà responsabile della gestione delle richieste HTTP e della generazione delle risposte JSON.
Poiché abbiamo Jersey nel nostro classpath, lo useremo per creare API REST.
Per imitare il DB, ho creato la classe EmployeeDB
che memorizza i record e gli aggiornamenti dei dipendenti in memoria.
Crea rappresentazioni di risorse
La rappresentazione è ciò che contiene i dati e serializzato in JSON. È un modello per un’applicazione riposante. Quando si utilizza Jersey con Jackson, tutto ciò che serve per creare una rappresentazione delle risorse è un semplice POJO che segue gli standard java bean. Jackson costruisce la stringa JSON in modo ricorsivo in base ai metodi getter di ogni classe e al loro tipo di ritorno.
java.util.List
verrà convertita in un array JSON. Se necessario, in alcuni casi, è possibile impedire che una proprietà faccia parte della rappresentazione JSON aggiungendo l’annotazione @JsonIgnore
al suo getter.
Convalida della richiesta
Quando si accettano richieste PUT
e POST
, è necessario convalidare il contenuto dell’entità inviato dall’utente nel corpo della richiesta. Dropwizard utilizza hibernate validator per questo scopo. L’aggiunta della convalida richiede i seguenti passaggi.
Verifica le API REST
Ora, quando abbiamo creato e aggiunto le convalide per le API REST, testiamolo.
Crea l’applicazione uber jar file
> mvn clean package
Avvia l’applicazione in jetty server
> java -jar target\DropWizardExample-0.0.1-SNAPSHOT.jar server
Accedi all’URIhttp://localhost:8080/employees
Questo restituirà la raccolta dei dipendenti e le relative intestazioni di risposta.
URI di accessohttp://localhost:8080/employees/1
Ciò restituirà il record del dipendente con id 1.
Inviato HTTP PUT http://localhost:8080/employees / 1 con dati di richiesta non validi
Riceverai messaggi di convalida.
Sent HTTP PUT http://localhost:8080/employees/1 with correct data
Employee record will be updated successfully.
Allo stesso modo, è possibile testare altre API e scenari.