2016-05-12 3 views
1

Dank asamarin konnte ich herausfinden, wie man verschiedene Endpunkte innerhalb derselben Google-App-Engine erhält (vgl. Using Google endpoints in different modules of the same app).Google-Endpunkte konnten nicht über mehrere Dienste hinweg funktionieren

Aber ich kann es nicht funktionieren lassen (zumindest mit dem Dev-Server, ich habe nicht versucht, es in die Cloud zu schieben). Ich habe zwei Module: module1 und module2, jede von ihnen läuft eine unabhängige API (mit Google-Endpunkten so). In jedem Modulex/main.py habe ich diesen Code:

import endpoints 
from protorpc import remote 

# ... some code 

@endpoints.api(name="moduleX", version='v0') # X being 1 or 2 obviously 
class ModuleX(remote.Service): 

# ... definition of the different methods 

api = endpoints.api_server([ModuleX]) 

Als ich mit den beiden entsprechenden Modul yaml Dateien laufen dev_appserver.py, beginnen sie gut (module1 auf localhost: 8080, module2 auf localhost: 8081) .

Hier kommt das Problem:

  • localhost: 8080/_ah/api/erkunden funktioniert gut und ich kann meine module1 API mit den verschiedenen Methoden

  • localhost sehen: 8081/_ah/api/explore braucht laaaaaange Zeit und finde genau die gleiche API wie für modul1, außer wenn ich darauf klicke, kann es die Methoden nicht finden.

ich ein wenig mit Postman gespielt haben, um zu sehen, was sich unter dem Holz vor sich geht und fand heraus, dass beide auf localhost aufruft: 8080/_ah/api/Entdeckung/v1/apis und localhost: 8081/_ah. .. geben die gleichen Informationen mit dem discoveryRestUrl zurück, der localhost: 8080/_ah/api/Entdeckung/v1/apis/module1/v0/Rest ist. Was lustig ist, wirst du zugeben.

Mache ich etwas falsch? Ist es nur der Dev-Server, der Endpunkte mit mehreren Diensten nicht behandelt?

Danke für Ihre Hilfe

+1

Jeder Link/Git Repo zu einem bestehenden Projekt mit Endpunkten über mehrere Dienste würde sehr geschätzt werden! – ValLeNain

+0

Ich stehe vor dem gleichen Problem. Irgendwelche Lösungen gefunden? –

+0

Nein, wir mussten unser Projekt reorganisieren: / – ValLeNain

Antwort

0

Ich glaube, das Problem ist nur mit dev_appserver, wie ich das gleiche Problem wie Sie vor Ort hatte, aber es funktionierte gut einmal im Einsatz.

Mein app.yaml für meine Endpunkt Service sieht wie folgt aus:

runtime: python27 
threadsafe: true 
api_version: 1 
service: <module-name> 

handlers: 
- url: /_ah/spi/.* 
    script: my_script.api 

libraries: 
- name: pycrypto 
    version: 2.6 
- name: endpoints 
    version: 1.0 

Einmal eingesetzt, um, mein api zu treffen ich Anfragen an https://<module-name>-dot-<project-name>.appspot.com/_ah/api

Also für den Code senden Sie den Endpunkt gab, Sie müssten https://<module-name>-dot-<project-name>.appspot.com/_ah/api/<moduleX>/v0/<method> sein. Beachten Sie, dass <module-name> in app.yaml definiert ist und <moduleX> und <method> im Python-Code in my_script.api deklariert werden.

Um dies lokal auf dev_appserver zu arbeiten, glaube ich, dass Sie jedes Endpunktmodul in seiner eigenen Instanz von dev_appserver ausführen müssen, wie notiert here. Zugegebenermaßen habe ich das nicht vollständig lokal arbeiten lassen, da, wenn ich das versuche, ich Fehler über das Sperren meines Datenspeichers bekomme, aber ich glaube, dass die Behebung dieses Problems möglich sein könnte, wie erwähnt, here.

Verwandte Themen