Configura un entorno de desarrollo

En esta página, se describe cómo configurar tu entorno de desarrollo para compilar y, luego, implementar tu API de backend con Cloud Endpoints Frameworks para el entorno estándar de App Engine. En esta página, se usa el código de muestra Esqueleto de Endpoints Frameworks versión 2.0 a fin de explicar el software básico y los componentes necesarios para comenzar.

Puede que desees usar el endpoints-skeleton-archetype o el hello-endpoints-archetype que se describe en Usar Apache Maven y el complemento de App Engine (basado en el SDK de Cloud) para crear un nuevo proyecto de Endpoints Frameworks versión 2.0.

Si deseas comprender mejor los pasos necesarios para implementar una API de muestra con Endpoints Frameworks, consulta el isntructivoComienza a usar marcos de trabajo de Endpoints para Java .

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página de selección de proyectos de Cloud Console, selecciona o crea un proyecto de Cloud.

    Ir a la página Selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo confirmar que tienes habilitada la facturación para tu proyecto.

  4. Toma nota del ID del proyecto de Google Cloud, ya que lo necesitarás más adelante.

Instala y configura el software obligatorio

  1. Si no tienes Java 8 instalado, descarga el Java Development Kit (JDK) desde la página de Oracle y, luego, instálalo.
  2. Instala Maven o Gradle:

    Maven

    1. Descarga la versión 3.3.9 o superior de Apache Maven
    2. Instala y configura Maven para tu entorno de desarrollo local.

    Gradle

  3. Descarga y, luego, inicializa el SDK de Cloud.
  4. Ejecuta los siguientes comandos:
    1. Asegúrate de que el SDK de Cloud esté autorizado para acceder a tus datos y servicios en Google Cloud de la siguiente manera:
      gcloud auth login
    2. Usa las credenciales predeterminadas de la aplicación:
      gcloud auth application-default login
    3. Instala el componente app-engine-java del SDK de Cloud:
      gcloud components install app-engine-java
    4. Actualiza a la versión más reciente del SDK de Cloud y de todos los componentes:
      gcloud components update
  5. Crea una aplicación de App Engine:
    1. Establece tu ID de proyecto de Google Cloud como predeterminado:
      gcloud config set project YOUR_PROJECT_ID

      Reemplaza YOUR_PROJECT_ID con tu ID del proyecto de Google Cloud. Si tienes otros proyectos de Google Cloud y quieres usar gcloud para administrarlos, consulta Cómo administrar configuraciones del SDK de Cloud.

    2. Selecciona la región en la que deseas crear tu aplicación de App Engine. Consulta Ubicaciones de App Engine para obtener una lista de regiones.
    3. Crea una aplicación de App Engine. Reemplaza YOUR_PROJECT_ID por tu ID del proyecto de Google Cloud y YOUR_REGION por la región en la que deseas crear la aplicación de App Engine.
        gcloud app create \
        --project=YOUR_PROJECT_ID \
        --region=YOUR_REGION
      

Obtén el esqueleto de muestra de Endpoints Frameworks

El esqueleto de muestra de Endpoints Frameworks versión 2.0 contiene las secuencias de comandos de compilación necesarias para Maven y Gradle. Además, contiene los archivos necesarios para comenzar a crear tu primera API.

  1. Clona el repositorio de muestra en tu máquina local:

     git clone https://github.com/GoogleCloudPlatform/java-docs-samples
    
  2. Cambia al directorio que contiene el esqueleto de muestra de Endpoints Frameworks:

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

    La muestra tiene la siguiente estructura de directorios:

    Diseño del esqueleto de muestra de Endpoints Frameworks

    • MyApi.java contiene una clase vacía que puedes usar para comenzar a escribir tu API. Consulta el ejemplo de eco para obtener un código de muestra que te ayude a comenzar.

    • web.xml es un archivo estándar que se usa para configurar un servlet.

    • appengine-web.xml define la información que se requiere para implementar la API en el entorno estándar de App Engine con Java 8.

    • pom.xml contiene la información de proyecto y configuración que usa Maven para compilar el proyecto y, luego, implementar la API en App Engine.

    • build.gradle contiene información de proyecto y configuración que usa Gradle para compilar el proyecto y, luego, implementar la API en App Engine.

Configura los archivos de compilación

En esta sección, se describen los archivos Maven pom.xml y Gradle build.gradle incluidos en el código de muestra. Los archivos de compilación están listos para que puedas comenzar a crear tu API; solo tienes que ingresar tu ID del proyecto de Google Cloud para que pueda usarse en el nombre de host.

Acerca de la configuración mínima

En esta sección, se describe la configuración mínima necesaria en tu archivo de compilación.

Maven

Dependencias mínimas

A continuación, se muestran las dependencias mínimas requeridas en tu pom.xml para comenzar:

<dependencies>
  <!-- Compile/runtime dependencies -->
  <dependency>
    <groupId>com.google.endpoints</groupId>
    <artifactId>endpoints-framework</artifactId>
    <version>2.2.1</version>
  </dependency>
  <dependency>
    <groupId>com.google.appengine</groupId>
    <artifactId>appengine-api-1.0-sdk</artifactId>
    <version>1.9.82</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>

Aplica complementos

Se aplican los siguientes complementos para habilitarlos:

<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.3.1</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.3.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.0.1</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>
  • maven-war-plugin extiende el complemento java para agregar compatibilidad a fin de ensamblar una aplicación web.
  • El appengine-maven-plugin es necesario para ejecutar la API en App Engine.
  • endpoints-framework-maven-plugin proporciona tareas y configuraciones para compilar proyectos de Endpoints Frameworks.

Gradle

Dependencias de complementos

A continuación, se muestran los complementos necesarios para compilar tu API:

buildscript {
  repositories {
    mavenCentral()
  }

  dependencies {
    classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:1.0.2'
    classpath 'com.google.cloud.tools:appengine-gradle-plugin:2.2.0'
  }
}

Aplica complementos

Los siguientes complementos se aplican para habilitarlos en tu secuencia de comandos de compilación de Gradle:

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

  • El complemento java agrega pasos de compilación específicos de Java a tu proyecto.
  • El complemento war extiende el complemento java para agregar compatibilidad a fin de ensamblar una aplicación web.
  • El complemento endpoints-framework-server proporciona compatibilidad del lado del servidor con el complemento de Gradle para Endpoints Frameworks.
  • El complemento appengine es necesario para ejecutar la API en App Engine.

Dependencias del proyecto

El proyecto usa las siguientes dependencias:

dependencies {
    compile 'com.google.endpoints:endpoints-framework:2.0.9'
    compile 'com.google.appengine:appengine-api-1.0-sdk:1.9.59'

    compile 'javax.inject:javax.inject:1'
    compileOnly 'javax.servlet:javax.servlet-api:3.1.0'
}

Define el nombre de host para tu servicio

Endpoints Frameworks usa nombres compatibles con DNS para identificar los servicios de forma exclusiva. Dado que se garantiza que los ID del proyecto de Google Cloud son únicos a nivel global, debes usar tu ID del proyecto de Google Cloud como parte del nombre de servicio de la API.

Debes agregar tu ID del proyecto de Google Cloud a los archivos de compilación a fin de configurar el nombre de host para tu servicio. El nombre de host debe tener el siguiente formato:

YOUR_PROJECT_ID.appspot.com

Cuando implementas la API en App Engine, se crea una entrada DNS con un nombre con el formato YOUR_PROJECT_ID.appspot.com de forma automática. El nombre de host es el nombre del servicio de Cloud Endpoints y el nombre de dominio que usas para enviar solicitudes a tu API.

Maven

  <plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>endpoints-framework-maven-plugin</artifactId>
    <version>2.0.1</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>

En el campo hostname, reemplaza YOUR_PROJECT_ID por el ID de tu proyecto de Google Cloud.

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"
}

Establece la variable projectID en tu ID del proyecto de Google Cloud. Por ejemplo: def projectId = 'example-project-12345'

Configura el servlet de Endpoints

El servlet de Endpoints controla las solicitudes entrantes y las reenvía al servicio de backend que se ejecuta en App Engine. El servlet de Endpoints es necesario para que Endpoints pueda administrar tu API.

Para obtener más información acerca de web.xml, consulta El descriptor de implementación: 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>

Configura tu implementación de App Engine

El archivo appengine-web.xml se usa para definir la configuración del entorno estándar de App Engine cuando se implementa la API. Consulta la referencia appengine-web.xml para obtener más información.

<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>

Próximos pasos