Myślę, że o samym pojęciu REST nie ma co mówić, każdy szanujący się programista webowy musiał mieć styczność z tą technologią i chociaż pobieżnie wie co w reście piszczy. Ten wpis pokaże jak pracować z jedną z implementacji JAX-RS, czyli specyfikacji JavaEE opisującej jak powinno się robić RESTa po javowemu.
Obecnie RESTEasy jest częścią JBossa (jako firmy) i jest dostarczany z JBossem (jako serwerem), a więc do jego użycia wystarczy mieć zainstalowany lokalnie serwer JBoss w wersji 6. Oczywiście dla osób, które nie lubą JBossa jest opcja zainstalowania RESTEasy osobno, np. w kontenerze serwletów Tomcat. Po szczegóły zapraszam do dokumentacji. Plus użycia RESTEasy z JBossem jest taki, że bez żadnych dodatkowych kombinacji mamy zapewnioną integrację z CDI i EJB. Po prostu używamy.
Do rozpoczęcia pracy z potrzebujemy Mavena oraz IDE, w moim przypadku IntelliJ IDEA (codename Nika
). Cały projekt jest dostępny w moim repozytorium na Githubie.
Projekt tworzymy z poziomu linii komend przez wywołanie:
mvn archetype:generate
i z długiej listy dostępnych archetypów wybieramy opcję numer 142 - maven-archetype-webapp (An archetype which contains a sample Maven Webapp project.). Podajemy wymagane prametry:
Choose a number: 139: 142 Choose version: 1: 1.0-alpha-1 2: 1.0-alpha-2 3: 1.0-alpha-3 4: 1.0-alpha-4 5: 1.0 Choose a number: 5: Define value for property 'groupId': : org.demo.resteasy Define value for property 'artifactId': : resteasy-demo Define value for property 'version': 1.0-SNAPSHOT: : Define value for property 'package': org.demo.resteasy: : Confirm properties configuration: groupId: org.demo.resteasy artifactId: resteasy-demo version: 1.0-SNAPSHOT package: org.demo.resteasy Y: :
i projekt mamy gotowy.
Jednak dla komfortu pracy dodamy jeszcze serwer Jetty, aby móc odpalać aplikację za pomocą Mavena:
<build> <finalName>resteasy-demo</finalName> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.21</version> <configuration> <scanIntervalSeconds>10</scanIntervalSeconds> <scanTargets> </scanTargets> </configuration> </plugin> </plugins> </build>
Wystarczy z konsoli wpisać mvn jetty:run aby uruchomić cały projekt w kontenerze Jetty.
Trzeba dodać jeszcze repozytorium JBossa i zależności, ale ogólnie rzecz biorąc aplikacja oparta o RESTEasy jest zwykłym archiwum WAR. Szczegóły dotyczące repozytorium i zależności można doczytać w dokumentacji.
<repositories> <repository> <id>jboss</id> <url>http://repository.jboss.org/nexus/content/groups/public/</url> </repository> </repositories>
Dodajemy zależności, w sumie jedną aby zacząć pracę:
<dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxrs</artifactId> <version>2.2.1.GA</version> </dependency>
pozostałe dodamy, gdy będą nam potrzebne. Pozostaje tylko użyć IDE do rozpoczęcia pracy.
Pierwszym elementem, jaki utworzę będzie interfejs
@Path("/library") public interface Library { @GET @Path("/books") List<Book> getBooks(); @PUT @Path("/book") public void addBook(Book book); }
Kilka elementów wymaga wyjaśnienia:
Mając interfejs pasuje utworzyć jego implementację, na potrzeby tego artykułu wystartczy taka:
public class LibraryImpl implements Library{ private static List<Book> books = new ArrayList<Book>(); public List<Book> getBooks() { return books; } public void addBook(Book book) { books.add(book); } }
W rzeczywistym projekcie należy wstrzyknąć jakieś repozytorium (za pomocą @Inject) i ładować encję z bazy danych. To w sumie wystarczy aby odpalić naszą aplikację Webową za pomocą Jetty, a więc:
mvn jetty:run
Uruchamiamy przglądarkę i wpisujemy adres http://localhost:8080/, miłą funkcją serwera Jetty jest podpowiadanie uruchomionych aplikacji.