Haftungsausschluss - ich nicht den Backend-Service noch verwendet habe, ist die Antwort in erster Linie auf der Dokumentation basiert, nämlich Creating an API Implemented with Multiple Classes
Es scheint, dass Multi-Class-APIs noch ein einzelnen Endpunkte Mapping in app.yaml
verwenden, entsprechend der Sammlung aller API-Klassen. Von der app.yaml Datei im Github example:
handlers:
# The endpoints handler must be mapped to /_ah/spi.
# Apps send requests to /_ah/api, but the endpoints service handles mapping
# those requests to /_ah/spi.
- url: /_ah/spi/.*
script: main.api
Der /_ah/spi/BackendService.getApiConfigs
Pfad in dem ersten Fehler, Sie bekommen die Unfähigkeit des Backend-Service schlägt die Back-End-Konfiguration zu erhalten (von denen jedes einzelnen Klasse-Mapping erhalten werden würde), was dem Fehlen dieser einzigen Zuordnung entsprechen würde.
Sie möglicherweise in der Lage sein, Ihre Backend-Klassen in mehrere Dateien zu teilen, können Sie den folgenden Ansatz verwenden.
Eine einzelne/zentrale Backend enpoints Eintrag Datei wird in app.yaml
angegeben:
import endpoints
from backend1 import api_1
from backend2 import api_2
api = endpoints.api_server([api_1, api_2])
Und diese Dateien enthalten die jeweiligen:
# The endpoints handler must be mapped to /_ah/spi.
# Apps send requests to /_ah/api, but the endpoints service handles mapping
# those requests to /_ah/spi.
- url: /_ah/spi/.*
script: backend.api
Die entsprechende backend.py
Datei einfach die aktuellen APIs aus anderen Dateien speichert API-Implementierungen (Kopieren/Einfügen aus dem github-Beispiel und leicht modifiziert für einen schnellen Test):
Die backend1.py
Datei:
import endpoints
from protorpc import messages
from protorpc import remote
class Request(messages.Message):
message = messages.StringField(1)
class Response(messages.Message):
message = messages.StringField(1)
api_1 = endpoints.api(name='library1', version='v1.0')
@api_1.api_class(resource_name='shelves')
class Shelves1(remote.Service):
@endpoints.method(Request, Response, path='list')
def list(self, request):
return Response()
# [START books]
@api_1.api_class(resource_name='books', path='books')
class Books1(remote.Service):
@endpoints.method(Request, Response, path='bookmark')
def bookmark(self, request):
return Response()
Die backend2.py
Datei:
import endpoints
from protorpc import messages
from protorpc import remote
class Request(messages.Message):
message = messages.StringField(1)
class Response(messages.Message):
message = messages.StringField(1)
api_2 = endpoints.api(name='library2', version='v2.0')
@api_2.api_class(resource_name='shelves')
class Shelves2(remote.Service):
@endpoints.method(Request, Response, path='list')
def list(self, request):
return Response()
# [START books]
@api_2.api_class(resource_name='books', path='books')
class Books2(remote.Service):
@endpoints.method(Request, Response, path='bookmark')
def bookmark(self, request):
return Response()
Mit dem obigen Code ich in der Lage war, den 2-APIs in dem Entwicklungs-Server-API-Explorer, um zu sehen:

Die folgenden Protokolle wurden erstellt:
INFO 2016-06-21 15:52:24,945 module.py:812] default: "GET /_ah/api/static/proxy.html?jsh=m%3B%2F_%2Fscs%2Fapps-static%2F_%2Fjs%2Fk%3Doz.gapi.en.pEvOgGtQ_zc.O%2Fm%3D__features__%2Fam%3DAQ%2Frt%3Dj%2Fd%3D1%2Frs%3DAGLTcCNv5bf7XiPy_xHPlP3A3K73m3QR2A HTTP/1.1" 200 8015
INFO 2016-06-21 15:52:25,058 module.py:812] default: "POST /_ah/spi/BackendService.getApiConfigs HTTP/1.1" 200 5459
INFO 2016-06-21 15:52:25,070 module.py:812] default: "POST /_ah/spi/BackendService.getApiConfigs HTTP/1.1" 200 5459
INFO 2016-06-21 15:52:25,470 module.py:812] default: "GET /_ah/api/discovery/v1/apis HTTP/1.1" 200 1516
INFO 2016-06-21 15:52:25,508 module.py:812] default: "GET /_ah/api/discovery/v1/apis HTTP/1.1" 200 1516
INFO 2016-06-21 15:52:25,813 module.py:812] default: "GET /_ah/api/static/proxy.html?jsh=m%3B%2F_%2Fscs%2Fapps-static%2F_%2Fjs%2Fk%3Doz.gapi.en.pEvOgGtQ_zc.O%2Fm%3D__features__%2Fam%3DAQ%2Frt%3Dj%2Fd%3D1%2Frs%3DAGLTcCNv5bf7XiPy_xHPlP3A3K73m3QR2A HTTP/1.1" 200 8015
INFO 2016-06-21 15:52:25,937 module.py:812] default: "POST /_ah/spi/BackendService.getApiConfigs HTTP/1.1" 200 5459
INFO 2016-06-21 15:52:25,941 module.py:812] default: "POST /_ah/spi/BackendService.getApiConfigs HTTP/1.1" 200 5459
INFO 2016-06-21 15:52:25,942 module.py:812] default: "POST /_ah/spi/BackendService.getApiConfigs HTTP/1.1" 200 5459
INFO 2016-06-21 15:52:26,183 module.py:812] default: "GET /_ah/api/discovery/v1/apis/library2/v2.0/rest HTTP/1.1" 200 3277
INFO 2016-06-21 15:52:26,203 module.py:812] default: "GET /_ah/api/discovery/v1/apis/library1/v1.0/rest HTTP/1.1" 200 3277
INFO 2016-06-21 15:52:26,210 module.py:812] default: "GET /_ah/api/discovery/v1/apis/library2/v1.0/rest HTTP/1.1" 200 3277
Fehler anzeigen. –
Ich habe mit Fehlern und meinem Code aktualisiert, danke für die Suche. – Ryan