בדף הזה מוסבר איך להעביר אפליקציה קיימת של Cloud Endpoints בגרסה 1.0 אל Endpoints Frameworks for App Engine ב-Java.
יתרונות
למסגרת החדשה יש כמה יתרונות, כולל:
- זמן האחזור של הבקשות קוצר.
- שילוב טוב יותר עם תכונות של App Engine, כמו דומיינים בהתאמה אישית.
- תמיכה רשמית בהגדרות של Guice.
- אופציונלית, תכונות חדשות לניהול API.
גרסה 2.0 של Endpoints Frameworks לא משפיעה על הממשקים של ה-API. לקוחות קיימים ממשיכים לפעול אחרי ההעברה בלי שנדרשים שינויים בקוד בצד הלקוח.
תכונות וכלים שמוחרגים כרגע
התכונות הבאות לא זמינות כרגע. אם אתם צריכים אחת מהתכונות האלה, אתם יכולים לשלוח הגשת בקשה להוספת תכונה.
- פרוטוקול JSON-RPC, שנדרש ללקוחות iOS מדור קודם. כדי ליצור לקוחות iOS ל-API של Endpoints Frameworks בגרסה 2.0, מומלץ להשתמש בספריית הלקוח של Google APIs Objective-C ל-REST APIs.
- תגי ETags אוטומטיים
- שדות סוג אוטומטיים
- שילוב עם IDE
fieldsתשובות חלקיות- יצירה אוטומטית של שיטת PATCH API
בנוסף, אין כרגע תמיכה ב-Android Studio בנקודות קצה בגרסה 1.0 בגרסה 2.0.
העברה לגרסה 2.0 של Endpoints Frameworks
גרסה 2.0 של Endpoints Frameworks הועברה לארטיפקטים של Maven בקבוצה com.google.endpoints.
קובץ ה-JAR הנדרש הבסיסי נמצא בארטיפקט endpoints-framework. אם רוצים להשתמש בהגדרת Guice, מוסיפים את ארטיפקט endpoints-framework-guice.
ההוראות הבאות מספקות דוגמה להעברה מ-Endpoints Frameworks גרסה 1.0 ל-Endpoints Frameworks גרסה 2.0 באמצעות מסמך Discovery:
- מורידים ומפעילים את Google Cloud CLI.
- מריצים את הפקודות הבאות:
- מוודאים של-CLI של gcloud יש הרשאה לגשת לנתונים ולשירותים שלכם ב- Google Cloud:
gcloud auth login
- שימוש ב-Application Default Credentials:
gcloud auth application-default login
- מתקינים את רכיב
app-engine-javaשל Google Cloud SDK:gcloud components install app-engine-java
- מעדכנים לגרסה האחרונה של ה-SDK של Google Cloud וכל הרכיבים:
gcloud components update
- מוודאים של-CLI של gcloud יש הרשאה לגשת לנתונים ולשירותים שלכם ב- Google Cloud:
העברה באמצעות Maven או Gradle
Maven
- מסירים את התלות הקודמת, שהיא פריט המידע
appengine-endpoints: - מוסיפים את יחסי התלות החדשים של Endpoints Frameworks:
- מוסיפים את הפלאגין החדש Endpoints Frameworks ומגדירים את שם המארח למסמך Discovery שנוצר:
- מוסיפים את הפלאגין החדש של App Engine Maven:
- מעדכנים את נקודת הכניסה ל-API בקובץ
web.xmlשל הפרויקט:- שינוי השם של כל המופעים של
SystemServiceServletלEndpointsServlet - מחליפים את כל המופעים של הנתיב
/_ah/spi/בנתיב החדש הנדרש/_ah/api/
בהמשך מוצג התוכן של
web.xmlלפני ואחרי ההעברה:לפני ההעברה
Endpoints Frameworks גרסה 1.0web.xml:אחרי המיגרציה
Endpoints Frameworks גרסה 2.0web.xml: - שינוי השם של כל המופעים של
- אחרי שינוי התלויות, מנקים את הפרויקט:
mvn clean
- אפשר ליצור מסמך Discovery:
מידע נוסף על יעדי הפלאגין של Maven Endpoints Frameworksmvn endpoints-framework:discoveryDocs
- אפשר לפרוס פרויקט:
mvn appengine:deploy
Gradle
- מסירים את התלות הקודמת, שהיא פריט המידע
appengine-endpoints:compile group: 'com.google.appengine', name: 'appengine-endpoints', version: '+'
- מוסיפים את יחסי התלות החדשים של Endpoints Frameworks:
- מוסיפים את הפלאגינים החדשים של App Engine ו-Endpoints Frameworks:
- החלת התוספים החדשים של App Engine ו-Endpoints Frameworks:
- הגדרת נקודת הקצה של שם המארח למסמכי Discovery שנוצרו:
- מעדכנים את נקודת הכניסה ל-API בקובץ
web.xmlשל הפרויקט:- שינוי השם של כל המופעים של
SystemServiceServletלEndpointsServlet - מחליפים את כל המופעים של הנתיב
/_ah/spi/בנתיב החדש הנדרש/_ah/api/
בהמשך מוצג התוכן של
web.xmlלפני ואחרי ההעברה:לפני ההעברה
Endpoints Frameworks גרסה 1.0web.xml:אחרי המיגרציה
Endpoints Frameworks גרסה 2.0web.xml: - שינוי השם של כל המופעים של
- אחרי שינוי התלויות, מנקים את הפרויקט באמצעות:
gradle clean
- אפשר ליצור מסמך Discovery באמצעות:
מידע נוסף על משימות הפלאגין של Gradle Endpoints Frameworksgradle endpointsDiscoveryDocs
- אפשר לפרוס פרויקט באמצעות:
gradle appengineDeploy
שימוש ב-Guice להגדרת Endpoints Frameworks for Java
אם רוצים להשתמש ב-Guice:
- מוסיפים את התלות החדשה ב-Guice של Endpoints Frameworks:
Maven
Gradle
- מצהירים על מודול חדש שמרחיב את
EndpointsModuleומגדירים אותו באופן הבא:
אימות פריסה חדשה
כדי לוודא שהמסגרת החדשה מציגה תנועה:
- שליחת בקשות לפריסה החדשה.
במסוף Google Cloud , נכנסים לדף Logging > Logs Explorer.
אם הבקשות מוצגות עם נתיבים שמתחילים ב-
/_ah/api, סימן שהגרסה 2.0 של Endpoints Frameworks משרתת עכשיו את ה-API שלכם. בלוגים לא אמורות להופיע בקשות עם נתיבים שמתחילים ב-/_ah/spi. הבקשות האלה מצביעות על כך שהפרוקסי של גרסה 1.0 של Endpoints Frameworks עדיין משרת בקשות.
הוספת ניהול של Endpoints API
גרסה 2.0 של Endpoints Frameworks מאפשרת גם להפעיל תכונות של ניהול API, כולל:
- ניהול מפתחות API
- שיתוף API
- אימות משתמשים
- מדדי API
- יומני API
כדי להתחיל להשתמש בתכונות האלה, אפשר לעיין במאמר בנושא הוספת ניהול API.
פתרון בעיות
בקטע הזה מתוארים התנהגויות לא צפויות נפוצות שמתרחשות כשעוברים ל-Endpoints Frameworks גרסה 2.0, ומוצעים פתרונות לבעיות האלה.
ה-API מחזיר שגיאות 404, אבל ב-API Explorer עדיין מופיעים ממשקי ה-API בצורה תקינה
כשמבצעים מיגרציה מ-Endpoints Frameworks גרסה 1.0 לגרסה 2.0, צריך להסיר את ההגדרה של גרסה 1.0. אם ההגדרה הישנה עדיין קיימת בהגדרות האפליקציה, שירות ה-Endpoints ימשיך להתייחס לאפליקציה כאפליקציה בגרסה 1.0. יכול להיות שתראו ביומנים של App Engine בקשות שנשלחות אל /_ah/spi, שמובילות לשגיאות HTTP 404 שנשלחות ללקוח.
מסירים את השורות הבאות מקובץ
web.xml, אם הן מופיעות בו:<servlet> <servlet-name>SystemServiceServlet</servlet-name> <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class> <init-param> <param-name>services</param-name> <param-value>...</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>SystemServiceServlet</servlet-name> <url-pattern>/_ah/spi/*</url-pattern> </servlet-mapping>חשוב לוודא שהקובץ
web.xmlמכיל את הפרטים הבאים:<servlet-mapping> <servlet-name>EndpointsServlet</servlet-name> <url-pattern>/_ah/api/*</url-pattern> </servlet-mapping>
ה-API מחזיר שגיאות שקשורות להשתקפות
אתם צריכים לארוז באפליקציה רק את ארטיפקט endpoints-framework, ולא את קובץ ה-JAR הישן appengine-endpoints. אם פורסים אפליקציה עם קובצי JAR משני הסוגים, יכול להיות שתיתקלו בשגיאות רפלקציה או בשגיאות של סוג בזמן ריצה, כמו NoClassDefFoundError, NoSuchMethodError ו-ClassCastException. מסירים את השורות הבאות מקובץ ה-build, אם הן מופיעות בו:
Maven
Gradle
compile group: 'com.google.appengine', name: 'appengine-endpoints', version: '+'
בנוסף, אם אחד מהתלויות האחרות שלכם תלוי בגרסאות ישנות יותר של Guava, יכול להיות שזה יתבטא גם כשיטה חסרה של TypeToken. צריך לוודא שמשתמשים ב-Guava גרסה 19 או בפריט endpoints-framework-all, שמסתיר את התלות.
מקורות של ספריות לקוח לא עוברים קומפילציה
אם מופיעה שגיאה כמו method does not override or implement a method
from a supertype או cannot find symbol method setBatchPath(String), סביר להניח שאפליקציית הלקוח שלכם תלויה בגרסה ישנה של ספריית הלקוח של Google Java. צריך לוודא שפריט ה-google-api-client הוא מגרסה 1.23.0 ומעלה.
Maven
<dependency> <groupId>com.google.api-client</groupId> <artifactId>google-api-client</artifactId> <version>1.23.0</version> </dependency>
Gradle
compile group: 'com.google.api-client', name: 'google-api-client', version: '1.23.0'
בעיות בשיפור של JPA/JDO Datanucleus
Maven
התוסף החדש של App Engine Maven שמבוסס על Google Cloud CLI לא תומך בשיפור Datanucleus מכל סוג שהוא. אם הפרויקט שלכם משתמש בתמיכה בשיפור של Datanucleus JDO או JPA מהפלאגין הישן, אתם צריכים להגדיר בנפרד את פלאגין Datanucleus Maven של צד שלישי כשאתם מבצעים העברה. מידע נוסף מפורט במאמרים הבאים:
Gradle
אם הפרויקט שלכם משתמש בשיפור של gradle-appengine-plugin JPA/JDO Datanucleus, תצטרכו להגדיר ידנית את השיפור של Datanucleus אחרי שתעברו לתוסף החדש של Gradle שמבוסס על gcloud CLI.
דוגמה מ-Stackoverflow