Hyunil Kim Hyunil Kim - 6 months ago 86
Python Question

AppEngine Google Cloud Endpoint - discovery not found

I am quite new to Python and Google AppEngine, but have had around 7 years of programming experience. I am also new to StackOverflow.

I've been trying to set up a simple Google Cloud Endpoint API for my personal project, and have finished and uploaded the finished app to Google App Engine.

Here are my Endpoint API settings:

@endpoints.api(name='puzzle', version='v1', description='Puzzle Engine API')


And methods:

@endpoints.method(
PuzzleMessage, PuzzleMessage,
name='puzzle.generate',
http_method='GET',
path='generate'
)

@endpoints.method(
PuzzleMessage, PuzzleMessage,
name='puzzle.solve',
http_method='GET',
path='solve'
)


My app.yaml looks like:

handlers:
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico

- url: .*
script: main.app

# Endpoints handler
- url: /_ah/api/.*
script: services.application

libraries:
- name: webapp2
version: "2.5.2"


And finally services.py reads:

from google.appengine.ext import endpoints
from api import puzzle_api

application = endpoints.api_server([
puzzle_api.PuzzleAPI
], restricted=False)


Now, the problem is that when I try to reach https://my-app-name.appspot.com/_ah/api/discovery/v1/apis, all I see is


Not Found


Also, when I hit the API Explorer at https://developers.google.com/apis-explorer/?base=https://my-app-name.appspot.com/_ah/api#p/, the list of Services is empty, and in the JavaScript console, I see a 404 error over https://my-app-name.appspot.com/_ah/api/discovery/v1/apis.

Hitting these URLs on local test server gives quite different errors. When I try to reach the API Discovery on local test server at localhost:8080/_ah/api/discovery/v1/apis, I get


{"error": {"message": "BackendService.getApiConfigs Error"}}


instead of "Not Found". Hitting the Explorer at https://developers.google.com/apis-explorer/?base=http://localhost:8080/_ah/api#p/ would now show 500 error instead of 404 in the JavaScript console as well.

I've been trying to solve this by doing many Google Searches and trying many things out, but I just cannot seem to be able to proceed any further. I would very much appreciate any help I can get from this community of professionals.

Thanks.

Answer

See the documentation here: https://developers.google.com/appengine/docs/python/endpoints/api_server

You need to do the following:

Change your app.yaml to:

handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: /_ah/spi/.*
  script: services.application

- url: .*
  script: main.app

libraries:
- name: webapp2
  version: "2.5.2"

Note: The url should be /_ah/spi/.* not /_ah/api/.*. Change it, then you can access your api at /_ah/api/explorer.

Comments