2013-03-13 15 views
8

Ist es möglich, den api explorer entweder komplett abzuschalten oder den Zugang zu beschränken?Make api explorer private

Ich bemerkte einige Protokolle in meiner App, die von fehlgeschlagenen Anforderungen stammen, die von einem Browser ausgeführt werden. Meine API wird nur von einer Android-App konsumiert, daher ist der einzige Ort, wo sie herkommen können, der API-Explorer. Auch der Zugriff auf die API ist auf 1 Web und 1 Android Client ID begrenzt.

Antwort

4

Leider nicht. Der API-Explorer arbeitet mit dem Erkennungsdienst, der Ihrer API zugeordnet ist und nicht Teil Ihres Back-Ends ist. Daher können Sie für diese URIs keine Authentifizierung oder Sichtbarkeit angeben.

Die list Methode aus dem Discovery-Service verwendet, um die Liste auf dem APIs Explorer App mit Ihrer App als Basis zu generieren:

discovery.apis.list:

your-app-id.appspot.com/_ah/api/discovery/v1/apis

Wenn jemand Wenn Sie auf eine der APIs in der Liste klicken, wird das vollständige Erkennungsdokument für diese apiName und apiVersion mithilfe der getRest-Methode aus dem Erkennungsdienst abgerufen:

discovery.apis.getRest:

your-app-id.appspot.com/_ah/api/discovery/v1/apis/{apiName}/{apiVersion}/rest

+0

Haben Sie Empfehlungen für eine Admin-Seite einer Anwendung? Ich sehe etwas wie/_ah/spi/{Dienstklassenname}. {Method} .. Wäre es in Ordnung, mehrere Handler hinzuzufügen, die mit /_ah/spi/.* übereinstimmen? – 12345

+1

Ich würde empfehlen, dass Sie den Admin-Teil in den Handler-Methoden implementieren. 'endpoints.api_server' soll einen einzigen Handler für alle Ihre APIs erzeugen. – bossylobster

+1

Aber wie verhindere ich, dass jemand meine gesamte Datenbank (Datastore) löscht? – InsaurraldeAP

0

Endpunkte macht Auth einfach und Sie können den aktuellen Benutzer erhalten. Sie sollten auth verwenden, um sicherzustellen, dass die Leute sich nicht mit Ihrer privaten apis herumschlagen - sonst könnten die Leute verfolgen, welche Art von Post Sie bekommen oder Anfragen, die Sie trotzdem senden - auth ist immer eine gute Idee, anstatt zu versuchen, Ihre apis geheim zu halten.

Wenn Sie ein geheimes Produkt erstellen und nicht möchten, dass Ihr Mitbewerber es herausfindet, könnten Sie vielleicht eine Verschleierungsmethode auf dem Backend und auf Ihrem Client verwenden, die die API unlesbar macht.

Auch ein Benutzer mit Ihrer apis Unordnung sollte nicht Ihre Datenbank zu brechen - oder wenn ja - es sollte nur brechen für den Benutzer, der dumm war. Logik in Ihrem Client für wie Apis verwendet werden, so dass das Backend nicht bricht, ist eine schlechte Idee - die Backend-Apis sollte auf sich selbst und nicht kümmern, wie oder warum sie verwendet werden und wer für welchen Zweck.

+0

Ich habe Leute gesehen, die das sagen, aber können Sie auf ein Beispiel verweisen, wo Endpunkte auf GAE eine Authentifizierung ohne ein Google-Konto erfordern (aber nur die Client-ID, die in der Entwicklerkonsole angegeben ist)? Zum Beispiel habe ich in meinem Fall eine API, die ich aus JavaScript verwende, aber ich möchte nicht, dass andere meine APIs verwenden ... zum Beispiel gibt eine meiner APIs die Antworten aus einer Umfrage zurück, die ein Token erhalten hat. Ich möchte nicht, dass eine beliebige Person die API verwendet, um alle Antworten auf Umfragen zu speichern, aber ein anonymer Benutzer auf der Website sollte Antworten auf die Umfrage mit ihrem Token sehen können. – SimplicityGuy

+0

Interessanter Punkt - Könnten Sie die Token unberechenbar machen? Es wäre schön, den Zugriff einer API auf die mit dem Cloud-Projekt verbundenen Entwickler einschränken zu können. (und auch Zugang zu bestimmten Domains gewähren). Vielleicht wären das zu viele Features für Endpoints - einfacher, Endpoints in das Backend-IMO zu integrieren. –

+0

Ja, die Tokens sind nicht zu sehen (gesalzen, zeitbasiert und einzigartig). Ich habe die letzte Stunde damit verbracht, nur die Client-ID zu verwenden, und obwohl ich den Zugriff auf die API damit verhindern kann, kann ich die Google-Anmeldeseite anscheinend nicht umgehen ... Aber was ich will, ist, sich mit im Wesentlichen einzuloggen ist die Client-ID, da diese bereits Einschränkungen für den Aufruf der API enthält. – SimplicityGuy