Bekannte Probleme

Auf dieser Seite werden bekannte Probleme in Cloud Endpoints Frameworks erläutert.

Java und Python

In diesem Abschnitt werden bekannte Probleme beschrieben, die sich sowohl auf die Java-Version als auch auf die Python-Version von Endpoints Frameworks auswirken.

Maximale Anfrage-Zeitüberschreitung

Bei APIs, die Endpoints Frameworks Version 2 verwenden, beträgt die maximale Anfrage-Zeitüberschreitung 60 Sekunden.

Zu Endpoints Frameworks migrieren

Wenn Sie Ihre API zu Endpoints Frameworks Version 2 migrieren, müssen Sie die API in einer neuen App Engine-Anwendung bereitstellen. Wenn Sie die alte App Engine-Anwendung wiederverwenden, werden Anfragen, die mit dem /_ah/spi-Pfad der Version 1 beginnen, möglicherweise an das Endpoints Frameworks-Back-End der Version 2 weitergeleitet, das erwartet, dass Pfade mit /_ah/api beginnen.

Schlechte Leistung bei Autoscaling-Instanzen

Bei App Engine gibt es drei Skalierungstypen: einfach, manuell und automatisch. Endpoints Frameworks verwendet Hintergrundthreads, die von Instanzen mit automatischer Skalierung nicht unterstützt werden. Endpoints Frameworks muss mit Google-Diensten kommunizieren, um unter anderem Kontingente und API-Aktivitäten zu überprüfen. Bei einfachen und manuellen Skalierungsinstanzen führt ein Hintergrundthread diese Kommunikation durch, um zu Verzögerungen führende Anfragen zu vermeiden. Autoscaling-Instanzen unterstützen jedoch keine Hintergrundthreads. Stattdessen erfolgt die Kommunikation mit den Google-Diensten während der Anfrage. Endpoints Frameworks funktioniert dann zwar weiterhin, jedoch möglicherweise mit reduzierter Leistung.

Aufgrund dieses Problems möchten Sie möglicherweise einen anderen Skalierungstyp konfigurieren. Weitere Informationen finden Sie in folgenden Abschnitten der App Engine-Dokumentation:

Pfade mit abschließenden Schrägstrichen werden nicht unterstützt

Wenn Sie ein OpenAPI-Dokument mithilfe von gcloud endpoints services deploy bereitstellen, lehnt Cloud Endpoints OpenAPI-Dokumente ab, die Pfade mit einem abschließenden Schrägstrich enthalten. Beispiel:

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

Sie müssen in Endpoints Frameworks im Methoden-Decorator (für Python) oder in der Methodenannotation (für Java) den abschließenden Schrägstrich entfernen.

Java

In diesem Abschnitt werden bekannte Probleme in Endpoints Frameworks für Java beschrieben.

Altes Java Endpoints Frameworks (Version 1)

Endpoints Frameworks Version 1 für Java hat einen Programmfehler, der einen Ausnahmefehler auslöst, wenn eine Aufzählung annotiert wird. Dieses Problem wird aufgrund einer Abhängigkeit von einer alten Jackson-Version verursacht. Sie müssen zu Endpoints Frameworks Version 2 migrieren, um dieses Problem zu umgehen.

Python

In diesem Abschnitt werden bekannte Probleme in Endpoints Frameworks für Python beschrieben.

Fehlermeldung: ImportError: cannot import name locked_file

Wenn Sie pip install mit einer requirements.txt-Datei ausführen, erhalten Sie möglicherweise eine Fehlermeldung ImportError: cannot import name locked_file. Das Problem tritt auf, wenn pip eine Version des Pakets oauth2client installiert, die nicht mit google-endpoints-api-management kompatibel ist. Sie können dieses Problem umgehen, indem Sie dafür sorgen, dass die Zeilen google-endpoints und google-endpoints-api-management in der requirements.txt-Datei an erster Stelle angezeigt werden. Beispiel:

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'

Weitere Anforderungen werden nach diesen Zeilen hinzugefügt.

Bei lokalen Tests gibt die API 404-Fehler zurück

Symptom: Alle Endpunkte geben den Fehler 404 zurück, wenn Sie dev_appserver.py verwenden, um Ihre API lokal zu testen. Wenn Sie die API jedoch für App Engine bereitstellen, reagieren die Endpunkte wie erwartet. Dies ist ein bekanntes Problem bei Anwendungen, die die Django-six-Bibliothek verwenden.

Dieses Problem wird durch einen Versionskonflikt der python-future-Bibliothek verursacht, die sowohl in der Endpoints Frameworks für Python-Bibliothek als auch in der Django-six-Bibliothek enthalten ist. Welche Version der Django-six-Bibliothek diesen Konflikt verursacht, ist aktuell unbekannt.