Añadir gestión de APIs

Cloud Endpoints Frameworks ofrece funciones de gestión de APIs comparables a las que proporciona el proxy de servicios extensible (ESP) para Cloud Endpoints. Endpoints Frameworks incluye una pasarela de API integrada que intercepta todas las solicitudes y realiza las comprobaciones necesarias, como la autenticación, antes de reenviar la solicitud al backend de la API. Cuando el backend responde, Endpoints Frameworks recoge y registra la telemetría. Puedes ver las métricas de tu API en la página Endpoints > Services (Endpoints > Servicios) de laGoogle Cloud consola.

Las funciones de gestión de APIs disponibles en Endpoints Frameworks incluyen las siguientes:

Para que Endpoints gestione tu API, debes desplegar un documento de OpenAPI que describa tu API con la versión 2.0 de la especificación de OpenAPI. En esta página se describe cómo generar e implementar un documento de OpenAPI que permita a Endpoints gestionar tu API.

Si no añades la gestión de APIs, tu API seguirá respondiendo a las solicitudes, pero no aparecerá en la página Endpoints > Services de la consolaGoogle Cloud , y no podrás usar las funciones que ofrece Endpoints, como el registro, la monitorización y la configuración de cuotas.

Para añadir gestión de APIs a tu API, sigue estos pasos:

  1. Configura tu archivo pom.xml de Maven o tu archivo build.gradle de Gradle como se describe en Configurar los archivos de compilación.

  2. Asegúrate de definir el ID de proyecto en los archivos de compilación. Google Cloud

    Maven

    Busca <endpoints.project.id> y sustituye YOUR_PROJECT_ID por el Google Cloud ID de tu proyecto. Por ejemplo:

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

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

    Gradle

    1. Busca def projectId y sustituye YOUR_PROJECT_ID por el ID de tu proyecto Google Cloud . Por ejemplo:

      def projectId = 'example-project-12345'

    2. Asegúrate de que el archivo build.gradle contenga la tarea replaceProjectId, que define el ID del proyecto en los archivos appengine-web.xml y 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. En el archivo web.xml del proyecto de la API, añade la configuración del filtro de servlet de gestión de APIs:

    <!-- 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. Modifica la configuración de compilación de tu proyecto de API:

    Maven

    1. Añade las dependencias de gestión de APIs:

      <dependency>
        <groupId>com.google.endpoints</groupId>
        <artifactId>endpoints-management-control-appengine-all</artifactId>
        <version>1.0.14</version>
      </dependency>
    2. Incluye el complemento que puedes usar para generar bibliotecas de cliente y el documento de 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. Añade las dependencias de gestión de APIs:

      compile 'com.google.endpoints:endpoints-management-control-appengine:1.0.14'
      compile 'com.google.endpoints:endpoints-framework-auth:1.0.14'
    2. Declara la dependencia externa para que el complemento se obtenga de Maven Central:

      classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:2.1.0'
    3. Usa el complemento de Gradle de Endpoints Frameworks del lado del servidor, que genera el documento OpenAPI:

      apply plugin: 'com.google.cloud.tools.endpoints-framework-server'
    4. Configura el nombre de tu servicio de Endpoints:

      endpointsServer {
        // Endpoints Framework Plugin server-side configuration
        hostname = "${projectId}.appspot.com"
      }
  5. Después de modificar las dependencias, limpia el proyecto y compila la API:

    Maven

        mvn clean
        mvn package

    Gradle

        gradle clean
        gradle build
  6. Genera el documento OpenAPI, openapi.json:

    Maven

    mvn endpoints-framework:openApiDocs

    Gradle

    gradle endpointsOpenApiDocs
  7. Despliega el documento OpenAPI:

     gcloud endpoints services deploy openapi.json
    

    La primera vez que despliegues openapi.json, se creará un servicio de Endpoints con el nombre YOUR_PROJECT_ID.appspot.com. Si se completa correctamente, se mostrará una línea similar a la siguiente con el ID de configuración del servicio y el nombre del servicio:

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

    En el ejemplo anterior, 2017-02-13r0 es el ID de configuración del servicio. El ID de configuración del servicio consta de una marca de fecha seguida de un número de revisión. Si vuelves a implementar openapi.json, el número de revisión se incrementa en el ID de configuración del servicio.

    Si necesitas volver a mostrar el ID de configuración del servicio, ejecuta el siguiente comando, pero sustituye YOUR_PROJECT_ID por el ID del proyecto Google Cloud :

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

    Puedes crear tu propio documento OpenAPI e implementarlo en lugar de usar uno generado. Solo tienes que sustituir openapi.json por la ruta de tu documento de OpenAPI. Para obtener más información sobre cómo escribir un documento de OpenAPI, consulta la información general sobre OpenAPI.

  8. Edita el archivo appengine-web.xml para definir el valor de una variable de entorno:

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

    Sustituye ${endpoints.project.id} por el ID de tu proyecto. Google Cloud Por ejemplo:

    <env-var name="ENDPOINTS_SERVICE_NAME" value="example-project-12345.appspot.com" />
    
  9. Vuelve a implementar tu aplicación.

    Maven

    mvn appengine:deploy

    Gradle

    gradle appengineDeploy

  10. Prueba tu API haciendo algunas solicitudes.

  11. Para ver tus métricas de API, abre la página Endpoints > Services en la Google Cloud consola de tu proyecto
    :

    Ir a la página Servicios de Endpoints