Accessing Backend APIs from Python Clients

If you want to access an Endpoints API from a Python client, you'll need to use the Google APIs Python client library. If the API doesn't require any authentication, your client can access the API as follows:

import pprint

from apiclient.discovery import build

def main():
  # Build a service object for interacting with the API.
  api_root = 'https://guestbook.appspot.com/_ah/api'
  api = 'guestbook'
  version = 'v0.2'
  discovery_url = '%s/discovery/v1/apis/%s/%s/rest' % (api_root, api, version)
  service = build(api, version, discoveryServiceUrl=discovery_url)

  # Fetch all greetings and print them out.
  response = service.greetings().list().execute()
  pprint.pprint(response)

  # Fetch a single greeting and print it out.
  response = service.greetings().get(id='9001').execute()
  pprint.pprint(response)

if __name__ == '__main__':
  main()

where:

  • api_root is the frontend root URL under which your API methods are exposed, usually the value https://your_app_id.appspot.com/_ah/api.
  • api is the name of the API.
  • version is the version of the backend API.

Accessing an API requiring Authentication

If the backend API requires authentication, you need use both the Google APIs Python client library and the OAuth2.0 client library.

Your client can get the required authorization and access the API using code similar to the following:

import argparse
import pprint
import sys

from apiclient import discovery
import httplib2
import oauth2client
from oauth2client import tools

CLIENT_ID = ''
CLIENT_SECRET = ''
SCOPE = 'https://www.googleapis.com/auth/userinfo.email'
USER_AGENT = 'my-cmdline-tool/1.0'
OAUTH_DISPLAY_NAME = 'My Commandline Tool'

def main(argv):
  # Parse command line flags used by the oauth2client library.
  parser = argparse.ArgumentParser(
      description='Auth sample',
      formatter_class=argparse.RawDescriptionHelpFormatter,
      parents=[tools.argparser])
  flags = parser.parse_args(argv[1:])

  # Acquire and store oauth token.
  storage = oauth2client.file.Storage('guestbook.dat')
  credentials = storage.get()

  if credentials is None or credentials.invalid:
    flow = oauth2client.client.OAuth2WebServerFlow(
        client_id=CLIENT_ID,
        client_secret=CLIENT_SECRET,
        scope=SCOPE,
        user_agent=USER_AGENT,
        oauth_displayname=OAUTH_DISPLAY_NAME)
    credentials = tools.run_flow(flow, storage, flags)
  http = httplib2.Http()
  http = credentials.authorize(http)

  # Build a service object for interacting with the API.
  api_root = 'https://guestbook.appspot.com/_ah/api'
  api = 'guestbook'
  version = 'v0.2'
  discovery_url = '%s/discovery/v1/apis/%s/%s/rest' % (api_root, api, version)
  service = discovery.build(
      api, version, discoveryServiceUrl=discovery_url, http=http)

  # Fetch all greetings and print them out.
  response = service.greetings().list().execute()
  pprint.pprint(response)

  # Fetch a single greeting and print it out.
  response = service.greetings().get(id='9001').execute()
  pprint.pprint(response)

if __name__ == '__main__':
  main(sys.argv)

Notice that SCOPE must be set as shown. For information about CLIENT_ID and CLIENT_SECRET, see Providing authorization in clients.

Send feedback about...

App Engine standard environment for Python