Adicionar gestão de APIs

Os frameworks do Cloud Endpoints oferecem funcionalidades de gestão de APIs comparáveis às funcionalidades que o proxy de serviço extensível (ESP) oferece para o Cloud Endpoints. Os Endpoints Frameworks incluem um gateway de API integrado que interceta todos os pedidos e executa todas as verificações necessárias, como a autenticação, antes de encaminhar o pedido para o back-end da API. Quando o back-end responde, o Endpoints Frameworks recolhe e comunica telemetria. Pode ver as métricas da sua API na página Endpoints > Serviços na Google Cloud consola.

As funcionalidades de gestão de APIs disponíveis nos Frameworks de Endpoints incluem:

Para que a sua API seja gerida pelos Endpoints, tem de implementar um documento OpenAPI que descreva a sua API através da versão 2.0 da especificação OpenAPI. Esta página descreve como gerar e implementar um documento OpenAPI que permite que os Endpoints geram a sua API.

Se não adicionar a gestão de APIs, a sua API continua a processar pedidos, mas não aparece na página Endpoints > Serviços naGoogle Cloud consola, e a funcionalidade fornecida pelos Endpoints, como o registo, a monitorização e a definição de quotas, não está disponível.

Para adicionar a gestão de APIs à sua API:

  1. Configure o ficheiro pom.xml do Maven ou o ficheiro build.gradle do Gradle, conforme descrito em Configurar os ficheiros de compilação.

  2. Certifique-se de que define o Google Cloud ID do projeto nos ficheiros de compilação.

    Maven

    Pesquise <endpoints.project.id> e substitua YOUR_PROJECT_ID pelo seu Google Cloud ID do projeto. Por exemplo:

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

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

    Gradle

    1. Pesquise def projectId e substitua YOUR_PROJECT_ID pelo seu Google Cloud ID do projeto. Por exemplo:

      def projectId = 'example-project-12345'

    2. Certifique-se de que o ficheiro build.gradle contém a tarefa replaceProjectId, que define o ID do projeto nos ficheiros appengine-web.xml e 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. No ficheiro web.xml do projeto da API, adicione a configuração do filtro do servlet de gestão 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. Modifique a configuração de compilação do projeto da API:

    Maven

    1. Adicione as dependências de gestão de APIs:

      <dependency>
        <groupId>com.google.endpoints</groupId>
        <artifactId>endpoints-management-control-appengine-all</artifactId>
        <version>1.0.14</version>
      </dependency>
    2. Inclua o plug-in que pode usar para gerar bibliotecas cliente e o documento 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. Adicione as dependências de gestão de APIs:

      compile 'com.google.endpoints:endpoints-management-control-appengine:1.0.14'
      compile 'com.google.endpoints:endpoints-framework-auth:1.0.14'
    2. Declare a dependência externa para que o plug-in seja obtido a partir do Maven Central:

      classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:2.1.0'
    3. Use o plug-in Gradle dos Frameworks de Endpoints do lado do servidor, que gera o documento OpenAPI:

      apply plugin: 'com.google.cloud.tools.endpoints-framework-server'
    4. Configure o nome do serviço Endpoints:

      endpointsServer {
        // Endpoints Framework Plugin server-side configuration
        hostname = "${projectId}.appspot.com"
      }
  5. Depois de modificar as dependências, limpe o projeto e, em seguida, crie a API:

    Maven

        mvn clean
        mvn package

    Gradle

        gradle clean
        gradle build
  6. Gerar o documento OpenAPI, openapi.json:

    Maven

    mvn endpoints-framework:openApiDocs

    Gradle

    gradle endpointsOpenApiDocs
  7. Implemente o documento OpenAPI:

     gcloud endpoints services deploy openapi.json
    

    Quando implementa o openapi.json pela primeira vez, é criado um novo serviço do Endpoints com o nome YOUR_PROJECT_ID.appspot.com. Após a conclusão bem-sucedida, é apresentada uma linha semelhante à seguinte com o ID de configuração do serviço e o nome do serviço:

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

    No exemplo anterior, 2017-02-13r0 é o ID da configuração do serviço. O ID de configuração do serviço consiste numa indicação de data/hora seguida de um número de revisão. Se implementar o openapi.json novamente, o número de revisão é incrementado no ID de configuração do serviço.

    Se precisar de apresentar novamente o ID de configuração do serviço, execute o seguinte comando, mas substitua YOUR_PROJECT_ID pelo ID do projeto do seu projeto Google Cloud :

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

    Pode criar o seu próprio documento OpenAPI e implementá-lo, em vez de usar um gerado. Basta substituir openapi.json acima pelo caminho para o seu documento OpenAPI. Para mais informações sobre como escrever um documento OpenAPI, consulte a vista geral do OpenAPI.

  8. Edite o ficheiro appengine-web.xml para definir o valor de uma variável de ambiente:

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

    Substitua ${endpoints.project.id} pelo ID do seu Google Cloud projeto. Por exemplo:

    <env-var name="ENDPOINTS_SERVICE_NAME" value="example-project-12345.appspot.com" />
    
  9. Volte a implementar a sua aplicação.

    Maven

    mvn appengine:deploy

    Gradle

    gradle appengineDeploy

  10. Teste a sua API fazendo alguns pedidos à mesma.

  11. Para ver as métricas da API, abra a página Endpoints > Serviços na Google Cloud consola do seu projeto:

    Aceda à página Serviços de pontos finais