Dropwizard jest open source Java framework do szybkiego rozwoju interfejsów API REST. Dropwizard jest rodzajem ekosystemu, który zawiera wszystkie zależności (takie jak Jersey, jackson czy jetty) zawarte w jednym pakiecie lub może być dodany jako oddzielny moduł. Jeśli nie używasz dropwizard, w końcu sam zbierzesz wszystkie zależności i często powoduje to problemy z ładowaniem klas z powodu niedopasowania wersji między różnymi bibliotekami java. Dropwizard rozwiązuje ten problem za Ciebie i łączy stabilne, Dojrzałe biblioteki w prosty, lekki pakiet, który pozwala skupić się na załatwianiu spraw. Nauczmy się używać dropwizard do tworzenia interfejsów API REST – krok po kroku.
Table of ContentsLibraries included inside dropwizardSetup dropwizard with mavenCreate REST Application ClassCreate REST Resource and APIsBuild Resource RepresentationsRequest ValidationVerify REST APIs
- Biblioteki zawarte w dropwizard
- Konfiguracja dropwizard z mavenem
- Utwórz klasę aplikacji REST
- Utwórz zasoby REST i interfejsy API
- twórz reprezentacje zasobów
- weryfikacja żądania
- zweryfikuj REST API
- Zbuduj aplikację plik JAR uber
- Uruchom aplikację na serwerze jetty
- Uzyskaj dostęp do URIhttp://localhost:8080/employees
- Access URI http://localhost:8080/employees/1
- wysłane HTTP PUT http://localhost:8080/employees / 1 z nieprawidłowymi danymi żądania
- wysłane HTTP PUT http://localhost:8080/employees/1 z poprawnymi danymi
Biblioteki zawarte w dropwizard
po dodaniu dropwizard do projektu, otrzymasz następujące biblioteki dodane do ścieżki klasy.
- koszulka-do budowania aplikacji internetowych.
- Jetty – Dropwizard używa biblioteki http Jetty do osadzania serwera HTTP bezpośrednio w projekcie.
- Jackson – dla konwersji obiektu na/z JSON. Pozwala eksportować modele domen bezpośrednio z adnotacjami JAXB.
- Guava-wysoce zoptymalizowane niezmienne struktury danych w celu przyspieszenia rozwoju.
- Logback i SLF4j – do wydajnego i elastycznego logowania.
- Hibernate Validator – łatwy deklaratywny framework do sprawdzania danych wejściowych użytkownika i generowania pomocnych i przyjaznych dla i18n komunikatów o błędach.
- Apache HTTPClient – zarówno do interakcji niskiego, jak i wysokiego poziomu z innymi usługami sieciowymi.
- JDBI – najprostszy sposób użycia relacyjnej bazy danych w Javie.
- Liquidbase – aby utrzymać schemat bazy danych w ryzach przez cały cykl rozwoju i Wydania.
- FreeMarker-systemy szablonów.
- Mustache-proste systemy szablonów dla bardziej wymagających aplikacji.
- Joda Time – bardzo kompletna i zdrowa biblioteka do obsługi dat i godzin.
Konfiguracja dropwizard z mavenem
nasz projekt będzie oparty na archetypie maven-archetype-quickstart. Możesz utworzyć projekt za pomocą wiersza polecenia lub użyć eclipse do stworzenia prostego projektu maven java.
mvn archetype:generate -DgroupId=com.howtodoinjava.demo -DartifactId=DropWizardExample -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
wygenerowany projekt będzie miał również plik pom.xml
. Dodaj tam zależność dropwizard.
spowoduje to pobranie wszystkich plików jar i dodanie ich do ścieżki klasy. Aby dodać obsługę kompilacji i pakietów do naszego projektu, użyjemy wtyczki maven-shade, która pozwoli nam spakować nasz projekt całkowicie, wraz z jego zależnościami, do jednego samodzielnego pliku JAR (Fat/Uber JAR), który może być dystrybuowany i uruchamiany w niezmienionej postaci.
kompletny pom.plik xml wygląda tak.
Utwórz klasę aplikacji REST
Klasa aplikacji jest punktem wejścia dla dowolnej aplikacji dropwizard. Musi rozszerzyć klasę io.dropwizard.Application
i zaimplementować metody initialize(Bootstrap<Configuration>)
i run(Configuration, Environment)
. Przygotowują środowisko runtime aplikacji.
aby wywołać metodę run, musisz mieć metodę public static void main(String args) {}
, która zostanie wywołana przez polecenie java -jar
podczas uruchamiania aplikacji jako plik jar.
aby wykonać plik JAR, dodajemy argument serwer do polecenia, które uruchamia wbudowany serwer HTTP (Jetty), aby uruchomić naszą usługę.
java -jar target\DropWizardExample.jar server
wbudowany Serwer Jetty Dropwizard będzie próbował domyślnie powiązać porty 8080 i 8081. Port 8080 jest używany przez serwer do obsługi przychodzących żądań HTTP do aplikacji, podczas gdy 8081 jest używany przez interfejs administracyjny Dropwizard.
zaimportowaliśmy również niezbędne klasy Logger
i LoggerFactory
w celu zbudowania instancji Loggera, której moglibyśmy użyć do naszych potrzeb logowania.
Utwórz zasoby REST i interfejsy API
teraz po dodaniu klasy bootstrap aplikacji możesz teraz dodać zasoby REST zawierające interfejsy API REST. W tym przykładzie stworzyłem i aplikację do zarządzania pracownikami – ma więc API do tworzenia/aktualizacji / usuwania rekordów pracowników. Ta klasa będzie odpowiedzialna za obsługę żądań HTTP i generowanie odpowiedzi JSON.
ponieważ mamy Jersey w naszym classpath, użyjemy go do zbudowania REST API.
aby naśladować DB, utworzyłem klasę EmployeeDB
, która przechowuje rekordy pracowników i aktualizacje w pamięci.
twórz reprezentacje zasobów
reprezentacja jest tym, co przechowuje Dane i serializuje je do JSON. To model do spokojnego stosowania. Podczas korzystania z Jersey z Jacksonem, wszystko, czego potrzebujesz, aby zbudować reprezentację zasobów, to – proste POJO zgodne ze standardami java bean. Jackson konstruuje łańcuch JSON rekurencyjnie zgodnie z metodami gettera każdej klasy i ich zwracanym typem.
java.util.List
zostanie przekonwertowana na tablicę JSON. jeśli jest to wymagane w niektórych przypadkach, możesz zapobiec temu, aby właściwość nie była częścią reprezentacji JSON, dodając do niej adnotację @JsonIgnore
.
weryfikacja żądania
akceptując żądania PUT
i POST
, musisz zweryfikować zawartość podmiotu przesłanego przez użytkownika w treści żądania. Dropwizard używa do tego celu walidatora hibernate. Dodawanie walidacji wymaga następujących kroków.
zweryfikuj REST API
teraz, gdy utworzyliśmy i dodaliśmy walidacje dla REST API, przetestujmy to.
Zbuduj aplikację plik JAR uber
> mvn clean package
Uruchom aplikację na serwerze jetty
> java -jar target\DropWizardExample-0.0.1-SNAPSHOT.jar server
Uzyskaj dostęp do URIhttp://localhost:8080/employees
spowoduje to zwrócenie kolekcji pracowników i powiązanych nagłówków odpowiedzi.
Access URI http://localhost:8080/employees/1
spowoduje to zwrócenie rekordu pracownika o id 1.
wysłane HTTP PUT http://localhost:8080/employees / 1 z nieprawidłowymi danymi żądania
otrzymasz wiadomości walidacyjne.
wysłane HTTP PUT http://localhost:8080/employees/1 z poprawnymi danymi
rekord pracownika zostanie pomyślnie zaktualizowany.
w ten sam sposób możesz przetestować inne API i scenariusze.