Migrar a Cloud Endpoints Frameworks versión 2.0

Cloud Endpoints Frameworks antes se llamaba Endpoints. Para distinguir entre ambas versiones, en esta página, la versión nueva se denomina Endpoints Frameworks versión 2.0, mientras que la versión anterior es Endpoints versión 1.0. En esta página, se describe cómo migrar una aplicación de Cloud Endpoints versión 1.0 a Endpoints Frameworks versión 2.0. La migración consta de cambios de biblioteca y de configuración de la aplicación, pero no es necesario modificar tu código.

Beneficios

Endpoints versión 2.0 ofrece una serie de beneficios como los siguientes:

  • Latencia de solicitud reducida
  • Mejor integración con las características de App Engine, como los dominios personalizados
  • Nuevas características de administración de API

Endpoints Frameworks versión 2.0 no afecta las interfaces hacia tu API. Los clientes existentes continúan trabajando después de la migración sin ningún cambio en el código del lado del cliente.

Descripción general de las funciones

Las siguientes características son retrocompatibles con Endpoints versión 1.0:

  • El protocolo JSON-REST que usan todas las bibliotecas cliente de Google
  • Servicio para Discovery
  • Todas las funciones de autenticación existentes (OAuth2/OpenID Connect)
  • Compatibilidad para biblioteca cliente para clientes generados
  • CORS (para los emisores de JavaScript que no utilizan la biblioteca cliente de JavaScript de Google)
  • Explorador de API

La división de tráfico no está disponible.

Funciones excluidas actualmente

Las siguientes características no están disponibles. Si necesitas alguna de ellas, envía una solicitud de función.

  • Protocolo JSON-RPC, que se requiere para los clientes iOS heredados. Si deseas crear clientes iOS para tu API de Endpoints Frameworks versión 2.0, te recomendamos que uses la Biblioteca cliente Objective-C de la API de Google para las API de REST.
  • ETags automáticos
  • Campos kind automáticos
  • Integración con IDE
  • Respuestas parciales de fields
  • Creación automática del método PATCH API

Migrar de Endpoints versión 1.0

Para migrar desde la versión 1.0:

  1. Crea una subcarpeta llamada /lib en el directorio principal de tu aplicación.

  2. Instala la biblioteca desde el directorio principal de tu aplicación:

     pip install -t lib google-endpoints --ignore-installed
    
  3. Quita las entradas - name: endpoints y version 1.0 del archivo app.yaml de tu aplicación en la sección libraries. Por ejemplo:

    libraries:
    - name: endpoints   #Remove
      version: 1.0      #Remove
    
  4. En la sección libraries del archivo app.yaml, agrega lo siguiente:

    libraries:
    - name: pycrypto
      version: 2.6
    - name: ssl
      version: 2.7.11
    

    Endpoints Frameworks requiere estas versiones de las bibliotecas pycrypto y ssl.

  5. En la sección handlers del archivo app.yaml, cambia la directiva url de - url: /_ah/spi/.* a - url: /_ah/api/.*.

  6. En el directorio raíz de tu aplicación, crea o modifica un archivo llamado appengine_config.py para que incluya lo siguiente:

    from google.appengine.ext import vendor
    
    vendor.add('lib')
    
  7. Verifica la string de versión de la API. Tu string de versión, especificada en el decorador @endpoints.api(version='v1', ...), aparece en la ruta de tu API. Si especificas una string de versión compatible con el estándar SemVer, solo aparecerá el número de versión principal en la ruta de tu API cuando la implementes. Por ejemplo, una API llamada echo con la versión 2.1.0 tendría una ruta de acceso como /echo/v2. Si actualizas la API echo a la versión 2.2.0 y, luego, implementas un cambio retrocompatible, la ruta permanecerá como /echo/v2. Esto te permite actualizar el número de versión de la API cuando realizas un cambio retrocompatible sin dañar las rutas existentes para tus clientes. Sin embargo, si actualizas la API echo a la versión 3.0.0 (porque implementas un cambio importante), la ruta cambia a /echo/v3.

  8. Vuelve a implementar tu aplicación de Endpoints Frameworks.

Verifica una nueva implementación

Para verificar que el nuevo marco de trabajo entrega el tráfico, haz lo siguiente:

  1. Envía algunas solicitudes a la implementación nueva.
  2. Visita la página de Cloud Logging de tu proyecto.

    Ir a la página Explorador de registros

  3. Si se muestran solicitudes con rutas que comienzan con /_ah/api, significa que ahora Endpoints Frameworks versión 2.0 entrega tu API. Los registros no deben mostrar ninguna solicitud con rutas que comiencen con /_ah/spi. Estas solicitudes indican que el proxy de Endpoints versión 1.0 aún entrega solicitudes.

Agrega administración de API

Endpoints Frameworks versión 2.0 agrega características de administración de API, incluidas las siguientes:

  • Administración de claves de API
  • Uso compartido de API
  • Autenticación de usuarios
  • Métricas de API
  • Registros de API

A fin de comenzar, ve a la página sobre cómo comenzar a usar Endpoints Frameworks para Python.

Soluciona problemas

En esta sección, se describen comportamientos erráticos comunes en la migración a Endpoints Frameworks versión 2.0 y las soluciones sugeridas.

La API muestra errores 404, pero el Explorador de API aún enumera las API correctamente

Debes quitar la configuración anterior de Endpoints versión 1.0 cuando migras a Endpoints Frameworks versión 2.0. Si la configuración anterior aún está presente en la configuración de la aplicación, el servicio de Endpoints aún considera la app como versión 1.0. Es posible que veas solicitudes en tus registros de App Engine que se envían a /_ah/spi, lo que genera errores HTTP 404 en el cliente.

  1. Quita las siguientes líneas del archivo app.yaml si están presentes:

    handlers:
    - url: /_ah/spi/.*
      script: ...
    
  2. Asegúrate de que la sección handlers de tu archivo app.yaml tenga la ruta de acceso correcta:

    handlers:
    # The endpoints handler must be mapped to /_ah/api.
    - url: /_ah/api/.*
      script: ...
    

Mensaje de error: ImportError: cannot import name locked_file

Esto sucede si tus dependencias contienen una versión de la biblioteca oauth2client que es incompatible con App Engine. Consulta el problema conocido.