הוספת ניהול API

‫Cloud Endpoints Frameworks מספק תכונות לניהול API שדומות לתכונות שExtensible Service Proxy (ESP) מספק ל-Cloud Endpoints. ‫Endpoints Frameworks כולל API gateway מובנה, שתפקידו ליירט את כל הבקשות ולבצע את הבדיקות הנדרשות, כמו אימות, לפני העברת הבקשה אל ה-API backend. כששרת הקצה העורפי מגיב, Endpoints Frameworks אוסף נתוני טלמטריה ומדווח עליהם. אפשר לראות את המדדים של ה-API בדף Endpoints > Services בGoogle Cloud מסוף.

התכונות לניהול ממשקי API שזמינות ב-Endpoints Frameworks כוללות:

כדי שמערכת Endpoints תנהל את ה-API שלכם, אתם צריכים לפרוס מסמך OpenAPI שמתאר את ה-API באמצעות גרסה 2.0 של מפרט OpenAPI. בדף הזה מוסבר איך ליצור ולפרוס מסמך OpenAPI שמאפשר ל-Endpoints לנהל את ה-API שלכם.

אם לא מוסיפים ניהול API, ה-API עדיין משרת בקשות, אבל ה-API לא מופיע בדף Endpoints > Services במסוףGoogle Cloud , והפונקציונליות שמסופקת על ידי Endpoints, כמו רישום ביומן, מעקב והגדרת מכסות, לא זמינה.

כדי להוסיף ניהול API ל-API שלכם:

  1. מגדירים את קובץ ה-Maven ‏pom.xml או את קובץ ה-Gradle ‏build.gradle כמו שמתואר במאמר הגדרת קובצי ה-build.

  2. חשוב לוודא שהגדרתם את מזהה הפרויקט Google Cloud בקובצי ה-build.

    Maven

    מחפשים את <endpoints.project.id> ומחליפים את YOUR_PROJECT_ID במזהה הפרויקט Google Cloud . לדוגמה:

    <endpoints.project.id>example-project-12345</endpoints.project.id>

    <endpoints.project.id>YOUR_PROJECT_ID</endpoints.project.id>

    Gradle

    1. מחפשים את def projectId ומחליפים את YOUR_PROJECT_ID במזהה הפרויקט Google Cloud . לדוגמה:

      def projectId = 'example-project-12345'

    2. מוודאים שקובץ build.gradle מכיל את המשימה replaceProjectId, שקובעת את מזהה הפרויקט בקבצים appengine-web.xml ו-web.xml.

      task replaceProjectId(type: Copy) {
          from 'src/main/webapp/WEB-INF/'
          include '*.xml'
          into "build/exploded-${archivesBaseName}/WEB-INF"
          expand(endpoints:[project:[id:projectId]])
          filteringCharset = 'UTF-8'
      }

  3. בקובץ web.xml של פרויקט ה-API, מוסיפים את ההגדרה של מסנן ה-servlet לניהול ה-API:

    <!-- Add a filter that fetches the service config from service management. -->
    <filter>
        <filter-name>endpoints-api-configuration</filter-name>
        <filter-class>com.google.api.control.ServiceManagementConfigFilter</filter-class>
    </filter>
    
    <!-- Add a filter that performs Endpoints logging and monitoring. -->
    <filter>
        <filter-name>endpoints-api-controller</filter-name>
        <filter-class>com.google.api.control.extensions.appengine.GoogleAppEngineControlFilter</filter-class>
        <init-param>
            <param-name>endpoints.projectId</param-name>
            <param-value>${endpoints.project.id}</param-value>
        </init-param>
        <init-param>
            <param-name>endpoints.serviceName</param-name>
            <param-value>${endpoints.project.id}.appspot.com</param-value>
        </init-param>
    </filter>
    
    <filter-mapping>
        <filter-name>endpoints-api-configuration</filter-name>
        <servlet-name>EndpointsServlet</servlet-name>
    </filter-mapping>
    
    <filter-mapping>
        <filter-name>endpoints-api-controller</filter-name>
        <servlet-name>EndpointsServlet</servlet-name>
    </filter-mapping>
  4. משנים את תצורת ה-build של פרויקט ה-API:

    Maven

    1. מוסיפים את יחסי התלות של ניהול ה-API:

      <dependency>
        <groupId>com.google.endpoints</groupId>
        <artifactId>endpoints-management-control-appengine-all</artifactId>
        <version>1.0.14</version>
      </dependency>
    2. כוללים את הפלאגין שאפשר להשתמש בו כדי ליצור ספריות לקוח ומסמך OpenAPI, ‏ openapi.json:

      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>endpoints-framework-maven-plugin</artifactId>
        <version>2.1.0</version>
        <configuration>
          <!-- plugin configuration -->
          <hostname>${endpoints.project.id}.appspot.com</hostname>
        </configuration>
      </plugin>

    Gradle

    1. מוסיפים את יחסי התלות של ניהול ה-API:

      compile 'com.google.endpoints:endpoints-management-control-appengine:1.0.14'
      compile 'com.google.endpoints:endpoints-framework-auth:1.0.14'
    2. מצהירים על התלות החיצונית כדי שהתוסף יאוחזר מ-Maven Central:

      classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:2.1.0'
    3. משתמשים בפלאגין Gradle של Endpoints Frameworks בצד השרת, שיוצר את מסמך OpenAPI:

      apply plugin: 'com.google.cloud.tools.endpoints-framework-server'
    4. מגדירים את השם של שירות Endpoints:

      endpointsServer {
        // Endpoints Framework Plugin server-side configuration
        hostname = "${projectId}.appspot.com"
      }
  5. אחרי שמשנים את התלויות, מנקים את הפרויקט ואז בונים את ה-API:

    Maven

        mvn clean
        mvn package

    Gradle

        gradle clean
        gradle build
  6. יוצרים את מסמך ה-OpenAPI, ‏ openapi.json:

    Maven

    mvn endpoints-framework:openApiDocs

    Gradle

    gradle endpointsOpenApiDocs
  7. פורסים את מסמך OpenAPI:

     gcloud endpoints services deploy openapi.json
    

    בפעם הראשונה שמפעילים את openapi.json, נוצר שירות Endpoints חדש בשם YOUR_PROJECT_ID.appspot.com. בסיום מוצלח, מוצגת שורה שדומה לשורה הבאה עם מזהה הגדרות השירות ושם השירות:

    Service Configuration 2017-02-13r0 uploaded for service example-project-12345.appspot.com
    

    בדוגמה שלמעלה, 2017-02-13r0 הוא מזהה הגדרת השירות. המזהה של הגדרות השירות מורכב מחותמת זמן ואחריה מספר הגרסה. אם פורסים את openapi.json שוב, מספר הגרסה גדל במזהה של הגדרת השירות.

    אם אתם צריכים להציג שוב את מזהה הגדרת השירות, מריצים את הפקודה הבאה, אבל מחליפים את YOUR_PROJECT_ID במזהה הפרויקט של פרויקט Google Cloud .

    gcloud endpoints configs list --service=YOUR_PROJECT_ID.appspot.com
    

    אתם יכולים ליצור מסמך OpenAPI משלכם ולפרוס אותו, במקום להשתמש במסמך שנוצר. פשוט מחליפים את openapi.json שלמעלה בנתיב למסמך OpenAPI. מידע נוסף על כתיבת מסמך OpenAPI זמין במאמר סקירה כללית על OpenAPI.

  8. עורכים את הקובץ appengine-web.xml כדי להגדיר את הערך של משתנה סביבה:

    <env-variables>
        <env-var name="ENDPOINTS_SERVICE_NAME" value="${endpoints.project.id}.appspot.com" />
    </env-variables>

    מחליפים את ${endpoints.project.id} במזהה הפרויקט ב- Google Cloud . לדוגמה:

    <env-var name="ENDPOINTS_SERVICE_NAME" value="example-project-12345.appspot.com" />
    
  9. פורסים מחדש את האפליקציה.

    Maven

    mvn appengine:deploy

    Gradle

    gradle appengineDeploy

  10. כדי לבדוק את ה-API, שולחים אליו כמה בקשות.

  11. כדי לראות את מדדי ה-API, פותחים את הדף Endpoints > Services במסוף Google Cloud של הפרויקט:

    לדף Endpoints Services