Panduan untuk RESTEasy

1. Perkenalan

JAX-RS (Java API for RESTful Web Services) adalah sekumpulan Java API yang menyediakan dukungan dalam membuat REST API . Dan kerangka kerja memanfaatkan anotasi dengan baik untuk menyederhanakan pengembangan dan penerapan API ini.

Dalam tutorial ini, kita akan menggunakan RESTEasy, JBoss menyediakan implementasi portabel dari spesifikasi JAX-RS, untuk membuat layanan Web RESTful yang sederhana.

2. Pengaturan Proyek

Kami akan mempertimbangkan dua kemungkinan skenario:

  • Standalone Setup - ditujukan untuk bekerja pada setiap server aplikasi
  • JBoss AS Setup - untuk dipertimbangkan hanya untuk penerapan di JBoss AS

2.1. Penyiapan Mandiri

Mari kita mulai dengan menggunakan JBoss WildFly 10 dengan pengaturan mandiri.

JBoss WildFly 10 hadir dengan RESTEasy versi 3.0.11, tetapi seperti yang akan Anda lihat, kami akan mengonfigurasi pom.xml dengan versi 3.0.14 yang baru.

Dan berkat resteasy-servlet-initializer , RESTEasy menyediakan integrasi dengan kontainer Servlet 3.0 mandiri melalui antarmuka integrasi ServletContainerInitializer .

Mari kita lihat pom.xml :

 3.0.14.Final org.jboss.resteasy resteasy-servlet-initializer ${resteasy.version} org.jboss.resteasy resteasy-client ${resteasy.version} 

jboss-deployment-structure.xml

Dalam JBoss segala sesuatu yang digunakan sebagai WAR, JAR atau EAR adalah sebuah modul. Modul ini disebut sebagai modul dinamis .

Selain ini, ada juga beberapa modul statis di $ JBOSS_HOME / modules . Karena JBoss memiliki modul statis RESTEasy - untuk penerapan mandiri, jboss-deployment-structure.xml wajib untuk mengecualikan beberapa di antaranya.

Dengan cara ini, semua kelas dan file JAR yang ada di WAR akan dimuat:

2.2. JBoss sebagai Setup

Jika Anda akan menjalankan RESTEasy dengan JBoss versi 6 atau lebih tinggi, Anda dapat memilih untuk mengadopsi pustaka yang sudah dibundel di server aplikasi, sehingga menyederhanakan pom:

 org.jboss.resteasy resteasy-jaxrs ${resteasy.version} 

Perhatikan bahwa jboss-deployment-structure.xml tidak lagi diperlukan.

3. Kode Sisi Server

3.1. Servlet Versi 3 web.xml

Sekarang mari kita lihat sekilas web.xml dari proyek sederhana kita di sini:

 RestEasy Example resteasy.servlet.mapping.prefix /rest 

resteasy.servlet.mapping.prefix diperlukan hanya jika Anda ingin menambahkan jalur relatif ke aplikasi API.

Pada titik ini, sangat penting untuk diperhatikan bahwa kami belum mendeklarasikan Servlet apa pun di web.xml karena resteasy servlet-initializer telah ditambahkan sebagai dependensi di pom.xml . Alasannya adalah - RESTEasy menyediakan kelas org.jboss.resteasy.plugins.servlet.ResteasyServletInitializer yang mengimplementasikan javax.server.ServletContainerInitializer .

ServletContainerInitializer adalah penginisialisasi dan dijalankan sebelum konteks servlet apa pun siap - Anda dapat menggunakan penginisialisasi ini untuk menentukan servlet, filter, atau pendengar untuk aplikasi Anda.

3.2. Kelas Aplikasi

Kelas javax.ws.rs.core.Application adalah kelas JAX-RS standar yang dapat Anda terapkan untuk memberikan informasi tentang penerapan Anda:

@ApplicationPath("/rest") public class RestEasyServices extends Application { private Set singletons = new HashSet(); public RestEasyServices() { singletons.add(new MovieCrudService()); } @Override public Set getSingletons() { return singletons; } }

Seperti yang Anda lihat - ini hanyalah kelas yang mencantumkan semua sumber daya dan penyedia JAX-RS, dan dianotasi dengan anotasi @ApplicationPath .

Jika Anda mengembalikan set kosong apa pun untuk menurut kelas dan lajang, WAR akan dipindai untuk sumber daya anotasi JAX-RS dan kelas penyedia.

3.3. Kelas Implementasi Layanan

Terakhir, mari kita lihat definisi API yang sebenarnya di sini:

@Path("/movies") public class MovieCrudService { private Map inventory = new HashMap(); @GET @Path("/getinfo") @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public Movie movieByImdbId(@QueryParam("imdbId") String imdbId) { if (inventory.containsKey(imdbId)) { return inventory.get(imdbId); } else { return null; } } @POST @Path("/addmovie") @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public Response addMovie(Movie movie) { if (null != inventory.get(movie.getImdbId())) { return Response .status(Response.Status.NOT_MODIFIED) .entity("Movie is Already in the database.").build(); } inventory.put(movie.getImdbId(), movie); return Response.status(Response.Status.CREATED).build(); } }

4. Kesimpulan

Dalam tutorial singkat ini kami memperkenalkan RESTEasy dan kami membuat API yang sangat sederhana dengannya.

Contoh yang digunakan dalam artikel ini tersedia sebagai proyek sampel di GitHub.