API-Verwaltung hinzufügen

Cloud Endpoints Frameworks bietet API-Verwaltungsfunktionen, die mit den vom Extensible Service Proxy (ESP) für Cloud Endpoints bereitgestellten Funktionen vergleichbar sind. In Endpoints Frameworks ist ein API-Gateway eingebunden, das alle Anfragen abfängt und soweit notwendig überprüft, z. B. durch Authentifizierung, bevor sie an das API-Back-End weitergeleitet werden. Wenn das Back-End antwortet, erfasst und meldet Endpoints Frameworks telemetrische Messwerte. Sie können Messwerte für Ihre API auf der Seite Endpoints > Dienste in der Google Cloud Console ansehen.

In Endpoints Frameworks sind unter anderem die folgenden API-Verwaltungsfunktionen verfügbar:

Damit Ihre API von Endpoints verwaltet werden kann, müssen Sie ein OpenAPI-Dokument bereitstellen, das Ihre API mit Version 2.0 der OpenAPI-Spezifikation beschreibt. Auf dieser Seite wird beschrieben, wie Sie ein OpenAPI-Dokument generieren und bereitstellen, mit dem Endpoints Ihre API verwalten kann.

Wenn Sie keine API-Verwaltung hinzufügen, verarbeitet Ihre API zwar weiterhin Anfragen, allerdings ohne auf der Seite Endpoints > Dienste in der Google Cloud Console angezeigt zu werden. Die von Endpoints bereitgestellten Funktionen wie Logging, Monitoring und das Festlegen von Kontingenten stehen dann nicht zur Verfügung.

So fügen Sie der API Verwaltungsfunktionen hinzu:

  1. Richten Sie Ihre Maven-Datei pom.xml oder Ihre Gradle-Datei build.gradle wie in Konfigurieren der Build-Dateien beschrieben ein.

  2. Stellen Sie sicher, dass Sie die Google Cloud-Projekt-ID in den Build-Dateien festgelegt haben.

    Maven

    Suchen Sie nach <endpoints.project.id> und ersetzen Sie YOUR_PROJECT_ID durch Ihre Google Cloud-Projekt-ID. Beispiel:

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

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

    Gradle

    1. Suchen Sie nach def projectId und ersetzen Sie YOUR_PROJECT_ID durch Ihre Google Cloud-Projekt-ID. Beispiel:

      def projectId = 'example-project-12345'

    2. Achten Sie darauf, dass die Datei build.gradle die Aufgabe replaceProjectId enthält, mit der die Projekt-ID in den Dateien appengine-web.xml und web.xml festgelegt wird.

      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. Fügen Sie in der Datei web.xml Ihres API-Projekts die Servlet-Filterkonfiguration für die API-Verwaltung hinzu:

    <!-- 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. Ändern Sie die Build-Konfiguration Ihres API-Projekts:

    Maven

    1. Fügen Sie die Abhängigkeiten der API-Verwaltung hinzu:

      <dependency>
        <groupId>com.google.endpoints</groupId>
        <artifactId>endpoints-management-control-appengine-all</artifactId>
        <version>1.0.14</version>
      </dependency>
    2. Fügen Sie das Plug-in ein, mit dem Sie Clientbibliotheken und das OpenAPI-Dokument openapi.json generieren können:

      <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. Fügen Sie die Abhängigkeiten der API-Verwaltung hinzu:

      compile 'com.google.endpoints:endpoints-management-control-appengine:1.0.14'
      compile 'com.google.endpoints:endpoints-framework-auth:1.0.14'
    2. Deklarieren Sie die externe Abhängigkeit, damit das Plug-in von Maven Central abgerufen wird:

      classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:2.1.0'
    3. Verwenden Sie das serverseitige Endpoints Frameworks-Plug-in, mit dem das OpenAPI-Dokument generiert wird:

      apply plugin: 'com.google.cloud.tools.endpoints-framework-server'
    4. Konfigurieren Sie den Namen Ihres Endpoints-Diensts:

      endpointsServer {
        // Endpoints Framework Plugin server-side configuration
        hostname = "${projectId}.appspot.com"
      }
  5. Wenn Sie die Abhängigkeiten geändert haben, bereinigen Sie Ihr Projekt und erstellen Sie dann die API:

    Maven

        mvn clean
        mvn package

    Gradle

        gradle clean
        gradle build
  6. Generieren Sie das OpenAPI-Dokument:openapi.json

    Maven

    mvn endpoints-framework:openApiDocs

    Gradle

    gradle endpointsOpenApiDocs
  7. Stellen Sie das OpenAPI-Dokument bereit:

     gcloud endpoints services deploy openapi.json
    

    Bei der ersten Bereitstellung von openapi.json wird ein neuer Endpoints-Dienst mit dem Namen YOUR_PROJECT_ID.appspot.com erstellt. Bei erfolgreichem Abschluss des Vorgangs wird eine Zeile mit der Dienstkonfigurations-ID und dem Dienstnamen angezeigt, die etwa so aussieht:

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

    Im vorherigen Beispiel ist 2017-02-13r0 die Dienstkonfigurations-ID. Die Dienstkonfigurations-ID besteht aus einem Datumsstempel, gefolgt von einer Überarbeitungsnummer. Wenn Sie openapi.json noch einmal bereitstellen, wird die Revisionsnummer in der Dienstkonfigurations-ID erhöht.

    Wenn Sie sich die Dienstkonfigurations-ID noch einmal anzeigen lassen müssen, führen Sie den folgenden Befehl aus, ersetzen dabei jedoch YOUR_PROJECT_ID durch die Projekt-ID Ihres Google Cloud-Projekts:

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

    Statt ein generiertes Dokument zu verwenden, können Sie ein eigenes OpenAPI-Dokument erstellen und bereitstellen. Ersetzen Sie openapi.json aus dem obigen Beispiel einfach durch den Pfad zu Ihrem OpenAPI-Dokument. Weitere Informationen zum Erstellen eines OpenAPI-Dokuments finden Sie unter OpenAPI-Übersicht.

  8. Bearbeiten Sie die Datei appengine-web.xml, um den Wert für eine Umgebungsvariable festzulegen:

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

    Ersetzen Sie ${endpoints.project.id} durch Ihre Google Cloud-Projekt-ID. Beispiel:

    <env-var name="ENDPOINTS_SERVICE_NAME" value="example-project-12345.appspot.com" />
    
  9. Stellen Sie die Anwendung neu bereit.

    Maven

    mvn appengine:deploy

    Gradle

    gradle appengineDeploy

  10. Testen Sie die API mit einigen Anfragen.

  11. Öffnen Sie zum Aufrufen der API-Messwerte in der Google Cloud Console für Ihr Projekt die Seite Endpoints > Dienste:

    Endpoints-Dienste aufrufen