מדריך 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: jboss-deployment-structure.xml בתוך JBoss כל מה שפרוס כ- WAR, JAR או EAR הוא מודול. מודולים אלה מכונים מודולים דינמיים. לצד אלה, יש גם סטטי מודולים ב $ JBOSS_HOME / מודולים. כמו JBoss יש את RESTEasy מודולים סטטיים - לפריסה עצמאית, jboss-deployment-structure.xml חובה על מנת לא לכלול חלק מהם. בדרך זו, כל השיעורים ו קַנקַן קבצים הכלולים שלנו מִלחָמָה יוטען: אם אתה מתכוון להפעיל את RESTEasy עם JBoss גרסה 6 ומעלה, תוכל לבחור לאמץ את הספריות שכבר ארוזו בשרת היישומים, ובכך לפשט את ה- pom: שים לב ש jboss-deployment-structure.xml כבר לא נחוץ. בואו נסתכל במהירות על web.xml של הפרויקט הפשוט שלנו כאן: resteasy.servlet.mapping.prefix יש צורך רק אם ברצונך לתלות נתיב יחסי ליישום ה- API. בשלב זה, חשוב מאוד לשים לב שלא הכרזנו על כך סרוולט בתוך הweb.xml כי נינוחה אתחול סרוולט נוספה כתלות ב pom.xml. הסיבה לכך היא - RESTEasy מספק org.jboss.resteasy.plugins.servlet.ResteasyServletInitializer כיתה שמיישמת javax.server.ServletContainerInitializer. ServletContainerInitializer הוא מאתחל והוא מבוצע לפני שכל הקשר של סרוולט יהיה מוכן - אתה יכול להשתמש באתחול זה כדי להגדיר סרוולטים, פילטרים או מאזינים לאפליקציה שלך. ה javax.ws.rs.core.Application מחלקה היא מחלקת JAX-RS רגילה שתוכלו ליישם בכדי לספק מידע על הפריסה שלכם: כפי שאתה יכול לראות - זה פשוט מחלקה שמפרטת את כל המשאבים והספקים של JAX-RS, והיא מוסברת עם @ApplicationPath ביאור. אם תחזיר קבוצה ריקה עבור שיעורים וסינגלטונים, ה- WAR ייסרק אחר שיעורי JAX-RS והערות ספקים. לבסוף, בואו נראה הגדרת ממשק API כאן: במדריך המהיר הזה הצגנו את RESTEasy ובנינו איתו ממשק API סופר פשוט. הדוגמה המשמשת במאמר זה זמינה כפרויקט לדוגמא ב- GitHub. 3.0.14.Final org.jboss.resteasy resteasy-servlet-initializer $ {resteasy.version} org.jboss.resteasy resteasy-client $ {resteasy.version}
2.2. JBoss כהתקנה
org.jboss.resteasy resteasy-jaxrs $ {resteasy.version}
3. קוד צד השרת
3.1. גרסת סרבל 3 web.xml
דוגמה של RestEasy resteasy.servlet.mapping.prefix / rest
3.2. מחלקת היישומים
@ApplicationPath ("/ rest") מחלקה ציבורית RestEasyServices מרחיבה את היישום {private Set singletons = new HashSet (); RestEasyServices ציבורי () {singletons.add (MovieCrudService חדש ()); } @Override ציבורי הגדר getSingletons () {יחזרו יחידה; }}
3.3. כיתת יישום שירותים
@ 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. מסקנות