Problèmes connus

Cette page répertorie les problèmes connus d'Endpoints Frameworks.

Java et Python

Cette section décrit les problèmes connus qui concernent les versions Java et Python d'Endpoints Frameworks.

Délai maximal avant expiration de la requête

Pour les API utilisant la version 2 d'Endpoints Frameworks, le délai d'expiration maximal de la demande est de 60 secondes.

Migration vers Endpoints Frameworks

Lorsque vous migrez votre API vers la version 2 d'Endpoints Frameworks, vous devez déployer l'API vers une nouvelle application App Engine. Si vous réutilisez l'ancienne application App Engine, les requêtes commençant par le chemin d'accès de la version 1 (/_ah/spi) risquent d'être routées vers le backend de la version 2 d'Endpoints Frameworks, qui attend un chemin d'accès commençant par /_ah/api.

Mauvaises performances sur les instances de scaling automatique

App Engine propose trois types de scaling : de base, manuel et automatique. Endpoints Frameworks utilise les threads d'arrière-plan, lesquels ne sont pas compatibles avec les instances de scaling automatique. Endpoints Frameworks doit communiquer avec les services Google pour vérifier les quotas et consigner l'activité des API, entre autres. Pour les instances de scaling de base et manuel, un thread en arrière-plan effectue cette communication pour éviter de ralentir les requêtes. Cependant, les threads en arrière-plan ne sont pas compatibles avec les instances de scaling automatique. Au lieu de cela, la communication avec les services Google a lieu pendant la requête. Endpoints Frameworks fonctionne toujours, mais avec des performances potentiellement réduites.

En raison de ce problème, il se peut que vous souhaitiez configurer un autre type de scaling. Consultez les sections suivantes de la documentation App Engine :

Chemins d'accès se terminant par des barres obliques non compatibles

Lorsque vous déployez un document OpenAPI à l'aide de gcloud endpoints services deploy, Cloud Endpoints rejette les documents OpenAPI qui incluent des chemins d'accès se terminant par une barre oblique, par exemple:

paths:
  "/echo/":
    post:
      description: "Echo back a given message."

Dans Endpoints Frameworks, vous devez supprimer la barre oblique de fin dans le décorateur de la méthode Python ou dans l'annotation de la méthode Java.

Java

Cette section décrit les problèmes connus dans Endpoints Frameworks pour Java.

Ancienne version Java d'Endpoints Frameworks (v1)

La version 1 d'Endpoints Frameworks pour Java comporte un bug qui renvoie une exception lorsqu'une énumération est annotée. Ce problème est causé par une dépendance à une ancienne version de Jackson. Pour résoudre ce problème, vous devez migrer vers la version 2 d'Endpoints Frameworks.

Python

Cette section décrit les problèmes connus dans Endpoints Frameworks pour Python.

Message d'erreur : ImportError: cannot import name locked_file

Lorsque vous exécutez pip install avec un fichier requirements.txt, vous pouvez obtenir le message d'erreur ImportError: cannot import name locked_file. Ce problème survient lorsque pip installe une version du package oauth2client qui est incompatible avec google-endpoints-api-management. Pour le résoudre, assurez-vous que les lignes google-endpoints et google-endpoints-api-management s'affichent en premier dans votre fichier requirements.txt, comme dans l'exemple ci-dessous :

google-endpoints==4.8.0
google-endpoints-api-management==1.11.1
# Newer versions of rsa module are incompatible with Python 2.7
rsa==4.5; python_version < '3'

Ajoutez les autres exigences après ces lignes.

L'API renvoie des erreurs 404 lors des tests locaux

Symptôme : Tous les points de terminaison renvoient le code 404 lorsque vous utilisez dev_appserver.py pour tester votre API localement, alors qu'ils répondent comme prévu lorsque vous déployez votre API sur App Engine. Ce problème a été constaté dans les applications utilisant la bibliothèque Django-six.

Il est dû à un conflit de version entre la bibliothèque python-future, incluse dans les bibliothèques Endpoints Frameworks pour Python, et la bibliothèque Django-six. Nous n'avons pas encore déterminé quelle version de la bibliothèque Django-six est à l'origine du conflit.