מדריך RESTEasy

1. הקדמה

JAX-RS (Java API for RESTful Web Services) הוא קבוצה של Java API המספקת תמיכה ביצירה ממשקי API של REST. והמסגרת עושה שימוש טוב בהערות כדי לפשט את הפיתוח והפריסה של ממשקי API אלה.

במדריך זה נשתמש ב- RESTEasy, JBoss סיפק יישום נייד של מפרט JAX-RS, על מנת ליצור שירותי אינטרנט RESTful פשוטים.

2. הגדרת פרויקט

אנו הולכים לשקול שני תרחישים אפשריים:

  • התקנה עצמאית - מיועדת לעבודה על כל שרת יישומים
  • הגדרת JBoss AS - לשקול רק לפריסה ב- JBoss AS

2.1. התקנה עצמאית

נתחיל בשימוש JBoss WildFly 10 עם התקנה עצמאית.

JBoss WildFly 10 מגיע עם גרסת RESTEasy 3.0.11, אך כפי שתראו, נגדיר את ה- pom.xml עם הגרסה החדשה 3.0.14.

ותודה ל resteasy-servlet-initializer, RESTEasy מספק אינטגרציה עם עצמאי סרוולט 3.0 מכולות דרך ServletContainerInitializer ממשק אינטגרציה.

בואו נסתכל על ה- 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

בתוך JBoss כל מה שפרוס כ- WAR, JAR או EAR הוא מודול. מודולים אלה מכונים מודולים דינמיים.

לצד אלה, יש גם סטטי מודולים ב $ JBOSS_HOME / מודולים. כמו JBoss יש את RESTEasy מודולים סטטיים - לפריסה עצמאית, jboss-deployment-structure.xml חובה על מנת לא לכלול חלק מהם.

בדרך זו, כל השיעורים ו קַנקַן קבצים הכלולים שלנו מִלחָמָה יוטען:

2.2. JBoss כהתקנה

אם אתה מתכוון להפעיל את RESTEasy עם JBoss גרסה 6 ומעלה, תוכל לבחור לאמץ את הספריות שכבר ארוזו בשרת היישומים, ובכך לפשט את ה- pom:

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

שים לב ש jboss-deployment-structure.xml כבר לא נחוץ.

3. קוד צד השרת

3.1. גרסת סרבל 3 web.xml

בואו נסתכל במהירות על web.xml של הפרויקט הפשוט שלנו כאן:

  דוגמה של RestEasy resteasy.servlet.mapping.prefix / rest 

resteasy.servlet.mapping.prefix יש צורך רק אם ברצונך לתלות נתיב יחסי ליישום ה- API.

בשלב זה, חשוב מאוד לשים לב שלא הכרזנו על כך סרוולט בתוך הweb.xml כי נינוחה אתחול סרוולט נוספה כתלות ב pom.xml. הסיבה לכך היא - RESTEasy מספק org.jboss.resteasy.plugins.servlet.ResteasyServletInitializer כיתה שמיישמת javax.server.ServletContainerInitializer.

ServletContainerInitializer הוא מאתחל והוא מבוצע לפני שכל הקשר של סרוולט יהיה מוכן - אתה יכול להשתמש באתחול זה כדי להגדיר סרוולטים, פילטרים או מאזינים לאפליקציה שלך.

3.2. מחלקת היישומים

ה javax.ws.rs.core.Application מחלקה היא מחלקת JAX-RS רגילה שתוכלו ליישם בכדי לספק מידע על הפריסה שלכם:

@ApplicationPath ("/ rest") מחלקה ציבורית RestEasyServices מרחיבה את היישום {private Set singletons = new HashSet (); RestEasyServices ציבורי () {singletons.add (MovieCrudService חדש ()); } @Override ציבורי הגדר getSingletons () {יחזרו יחידה; }}

כפי שאתה יכול לראות - זה פשוט מחלקה שמפרטת את כל המשאבים והספקים של JAX-RS, והיא מוסברת עם @ApplicationPath ביאור.

אם תחזיר קבוצה ריקה עבור שיעורים וסינגלטונים, ה- WAR ייסרק אחר שיעורי JAX-RS והערות ספקים.

3.3. כיתת יישום שירותים

לבסוף, בואו נראה הגדרת ממשק API כאן:

@ Path ("/ סרטים") מחלקה ציבורית MovieCrudService {מלאי מפה פרטי = HashMap חדש (); @GET @Path ("/ getinfo") @Produces ({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) סרט ציבורי של הסרטByImdbId (@QueryParam ("imdbId") מחרוזת imdbId) {if (מלאי. מכיל Key (imdbId)) .get (imdbId); } אחר {להחזיר null; }} @ POST @ Path ("/ addmovie") @ Consumes ({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) תגובה ציבורית addMovie (סרט סרט) {if (null! = Inventory.get (movie.getImdbId ())) { return Response .status (Response.Status.NOT_MODIFIED) .entity ("הסרט כבר נמצא במסד הנתונים."). build (); } מלאי.פלט (movie.getImdbId (), סרט); החזר Response.status (Response.Status.CREATED) .build (); }}

4. מסקנות

במדריך המהיר הזה הצגנו את RESTEasy ובנינו איתו ממשק API סופר פשוט.

הדוגמה המשמשת במאמר זה זמינה כפרויקט לדוגמא ב- GitHub.