Configurar um ambiente de programação

Esta página descreve como configurar o ambiente de desenvolvimento para criar e implementar a API de back-end através dos frameworks do Cloud Endpoints para o ambiente padrão do App Engine. Esta página usa o esqueleto da versão 2.0 dos Frameworks de pontos finais do código de exemplo para explicar o software e os componentes básicos de que precisa para começar.

Pode usar o endpoints-skeleton-archetype ou o hello-endpoints-archetype descrito no artigo Usar o Apache Maven e o plug-in do App Engine (com base na CLI do Google Cloud) para criar um novo projeto do Endpoints Frameworks versão 2.0.

Para compreender melhor os passos necessários para implementar uma API de exemplo através dos Frameworks de Endpoints, consulte o tutorial Introdução aos Frameworks de Endpoints no App Engine.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Tome nota do Google Cloud ID do projeto, uma vez que é necessário mais tarde.
  7. Instalar e configurar o software necessário

    1. Se não tiver o Java 8 instalado, transfira o Java Development Kit (JDK) a partir do site da Oracle e instale-o.
    2. Instale o Maven ou o Gradle:

      Maven

      1. Transfira a versão 3.3.9 ou superior do Apache Maven
      2. Instale e configure o Maven para o seu ambiente de desenvolvimento local.

      Gradle

    3. Transfira e inicialize a CLI Google Cloud.
    4. Execute os seguintes comandos:
      1. Certifique-se de que a CLI gcloud está autorizada a aceder aos seus dados e serviços em Google Cloud:
        gcloud auth login
      2. Usar credenciais padrão da aplicação:
        gcloud auth application-default login
      3. Instale o componente app-engine-java do SDK Google Cloud:
        gcloud components install app-engine-java
      4. Atualize para a versão mais recente do SDK do Google Cloud e de todos os componentes:
        gcloud components update
    5. Crie uma aplicação do App Engine:
      1. Defina o projeto predefinido para o seu Google Cloud ID do projeto:
        gcloud config set project YOUR_PROJECT_ID

        Substitua YOUR_PROJECT_ID pelo seu Google Cloud ID do projeto. Se tiver outros Google Cloud projetos e quiser usar gcloud para os gerir, consulte Gerir configurações da CLI gcloud.

      2. Selecione a região onde quer criar a sua aplicação do App Engine. Consulte as localizações do App Engine para ver uma lista de regiões.
      3. Crie uma aplicação do App Engine. Substitua YOUR_PROJECT_ID pelo ID do seu Google Cloud projeto e YOUR_REGION pela região na qual quer que a aplicação do App Engine seja criada.
          gcloud app create \
          --project=YOUR_PROJECT_ID \
          --region=YOUR_REGION

    Obter o exemplo de estrutura do Endpoints Frameworks

    O exemplo de estrutura do Frameworks de Endpoints versão 2.0 contém os scripts de compilação necessários para o Maven e o Gradle. Também contém os ficheiros necessários para começar a criar a sua primeira API.

    1. Clone o repositório de exemplo para a sua máquina local:

       git clone https://github.com/GoogleCloudPlatform/java-docs-samples
      
    2. Altere para o diretório que contém o exemplo de estrutura do Endpoints Frameworks:

       cd java-docs-samples/appengine-java8/endpoints-v2-skeleton/
      

      O exemplo tem a seguinte estrutura de diretórios:

      Esquema de exemplo da estrutura do Endpoints

      • MyApi.java contém uma classe vazia que pode usar para começar a escrever a sua API. Consulte o exemplo de eco para ver um exemplo de código que lhe permite começar.

      • web.xml é um ficheiro padrão usado para configurar um servlet.

      • appengine-web.xml define informações necessárias para implementar a API no ambiente padrão do App Engine através do Java 8.

      • pom.xml contém informações do projeto e de configuração usadas pelo Maven para criar o projeto e implementar a API no App Engine.

      • build.gradle contém informações do projeto e de configuração usadas pelo Gradle para criar o projeto e implementar a API no App Engine.

    Configurar os ficheiros de compilação

    Esta secção descreve os ficheiros Maven pom.xml e Gradle build.gradle incluídos no código de exemplo. Exceto para introduzir o seu ID do projeto, para que possa ser usado no nome do anfitrião, os ficheiros de compilação estão prontos para começar a criar a sua API. Google Cloud

    Acerca da configuração mínima

    Esta secção descreve a configuração mínima necessária no ficheiro de compilação.

    Maven

    Dependências mínimas

    A imagem seguinte mostra as dependências mínimas necessárias no seu pom.xml para começar:

    <dependencies>
      <!-- Compile/runtime dependencies -->
      <dependency>
        <groupId>com.google.endpoints</groupId>
        <artifactId>endpoints-framework</artifactId>
        <version>2.2.2</version>
      </dependency>
      <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-api-1.0-sdk</artifactId>
        <version>2.0.23</version>
      </dependency>
      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <type>jar</type>
        <scope>provided</scope>
      </dependency>
      <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
      </dependency>
    </dependencies>

    Aplique plug-ins

    Os seguintes plug-ins são aplicados para os ativar:

    <build>
      <!-- for hot reload of the web application-->
      <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.4.0</version>
          <configuration>
            <webResources>
              <resources>
                <directory>${basedir}/src/main/webapp/WEB-INF</directory>
                <filtering>true</filtering>
                <targetPath>WEB-INF</targetPath>
              </resources>
            </webResources>
          </configuration>
        </plugin>
        <plugin>
          <groupId>com.google.cloud.tools</groupId>
          <artifactId>appengine-maven-plugin</artifactId>
          <version>2.5.0</version>
          <configuration>
            <!-- deploy configuration -->
            <projectId>GCLOUD_CONFIG</projectId>
            <version>GCLOUD_CONFIG</version>
          </configuration>
        </plugin>
        <plugin>
          <groupId>com.google.cloud.tools</groupId>
          <artifactId>endpoints-framework-maven-plugin</artifactId>
          <version>2.1.0</version>
          <configuration>
            <!-- plugin configuration -->
            <!--
            You must replace YOUR_PROJECT_ID with your
            Google Cloud Project Id
          -->
            <hostname>YOUR_PROJECT_ID.appspot.com</hostname>
          </configuration>
        </plugin>
      </plugins>
    </build>
    • O maven-war-plugin estende o plug-in java para adicionar suporte para a montagem de uma aplicação Web.
    • O appengine-maven-plugin é necessário para executar a API no App Engine.
    • O endpoints-framework-maven-plugin fornece tarefas e configurações para criar projetos de frameworks de pontos finais.

    Gradle

    Dependências de plug-ins

    A imagem seguinte mostra os plug-ins necessários para criar a sua API:

    buildscript {
      repositories {
        mavenCentral()
      }
    
      dependencies {
        classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:2.1.0'
        classpath 'com.google.cloud.tools:appengine-gradle-plugin:2.5.0'
      }
    }

    Aplique plug-ins

    Os seguintes plug-ins são aplicados para os ativar no script de compilação do Gradle:

    apply plugin: 'java'
    apply plugin: 'war'
    apply plugin: 'com.google.cloud.tools.endpoints-framework-server'
    apply plugin: 'com.google.cloud.tools.appengine'

    • O plug-in java adiciona passos de compilação e criação específicos do Java ao seu projeto.
    • O plug-in war estende o plug-in java para adicionar suporte para a montagem de uma aplicação Web.
    • O plug-in endpoints-framework-server oferece suporte do lado do servidor ao plug-in Gradle dos Frameworks dos Endpoints.
    • O plugin appengine é necessário para executar a API no App Engine.

    Dependências do projeto

    O projeto usa as seguintes dependências:

    dependencies {
        compile 'com.google.endpoints:endpoints-framework:2.2.2'
        compile 'com.google.appengine:appengine-api-1.0-sdk:2.0.23'
    
        compile 'javax.inject:javax.inject:1'
        compileOnly 'javax.servlet:javax.servlet-api:3.1.0'
    }

    Definir o nome do anfitrião para o seu serviço

    O Endpoints Frameworks usa nomes compatíveis com DNS para identificar serviços de forma exclusiva. Uma vez que os Google Cloud IDs dos projetos são garantidamente únicos a nível global, deve usar o Google Cloud ID do projeto como parte do nome do serviço da API.

    Tem de adicionar o seu Google Cloud ID do projeto aos ficheiros de compilação para configurar o nome de anfitrião do seu serviço. O nome do anfitrião deve estar no seguinte formato:

    YOUR_PROJECT_ID.appspot.com

    Quando implementa a API no App Engine, é criada automaticamente uma entrada de DNS com um nome no formato YOUR_PROJECT_ID.appspot.com. O nome do anfitrião é o nome do serviço Cloud Endpoints e o nome do domínio que usa para enviar pedidos à sua API.

    Maven

    <plugin>
      <groupId>com.google.cloud.tools</groupId>
      <artifactId>endpoints-framework-maven-plugin</artifactId>
      <version>2.1.0</version>
      <configuration>
        <!-- plugin configuration -->
        <!--
        You must replace YOUR_PROJECT_ID with your
        Google Cloud Project Id
      -->
        <hostname>YOUR_PROJECT_ID.appspot.com</hostname>
      </configuration>
    </plugin>

    No campo hostname, substitua YOUR_PROJECT_ID pelo ID do seu Google Cloud projeto.

    Gradle

    // You must replace YOUR_PROJECT_ID with your Google Cloud Project Id
    def projectId = 'YOUR_PROJECT_ID'
    
    endpointsServer {
      // Endpoints Framework Plugin server-side configuration
      hostname = "${projectId}.appspot.com"
    }

    Defina a variável projectID para o ID do seu Google Cloud projeto. Por exemplo: def projectId = 'example-project-12345'

    Configurar o servlet Endpoints

    O servlet Endpoints processa os pedidos recebidos e encaminha-os para o serviço de back-end em execução no App Engine. O servlet do Endpoints é necessário para que a sua API seja gerida pelo Endpoints.

    Para mais informações sobre o web.xml, consulte O descritor de implementação: web.xml.

    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
        <!-- Wrap the backend with Endpoints Frameworks v2. -->
        <servlet>
            <servlet-name>EndpointsServlet</servlet-name>
            <servlet-class>com.google.api.server.spi.EndpointsServlet</servlet-class>
            <init-param>
                <param-name>services</param-name>
                <param-value>com.example.skeleton.MyApi</param-value>
            </init-param>
        </servlet>
        <!-- Route API method requests to the backend. -->
        <servlet-mapping>
            <servlet-name>EndpointsServlet</servlet-name>
            <url-pattern>/_ah/api/*</url-pattern>
        </servlet-mapping>
    </web-app>

    Configurar a implementação do App Engine

    O ficheiro appengine-web.xml é usado para definir a configuração do ambiente padrão do App Engine quando a API é implementada. Consulte a appengine-web.xml referência para mais informações.

    <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
        <runtime>java8</runtime>
        <threadsafe>true</threadsafe>
    
        <system-properties>
            <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
        </system-properties>
    </appengine-web-app>

    O que se segue?