Accede a las API de backend desde clientes Python

Si quieres acceder a una API de Cloud Endpoints desde un cliente de Python, tienes que usar la biblioteca cliente de Python para API de Google. Si la API no requiere autenticación, el cliente puede acceder a la API como se muestra en el código de ejemplo siguiente:

import pprint

from googleapiclient.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()

En el código de ejemplo, se dan las siguientes situaciones:

  • api_root es la URL raíz del frontend en la que se exponen los métodos de tu API. Por lo general, la URL es https://YOUR_PROJECT_ID.appspot.com/_ah/api, en la que YOUR_PROJECT_ID representa tu ID del proyecto de Google Cloud.
  • api es el nombre de la API.
  • version es la versión de la API del backend.

Accede a una API que requiere autenticación

Si la API del backend requiere autenticación, tienes que usar la biblioteca cliente de Python de API de Google y la biblioteca cliente de OAuth2.0.

Tu cliente puede obtener la autorización requerida y acceder a la API mediante un código similar al siguiente:

import argparse
import pprint
import sys

from googleapiclient import discovery
import httplib2
import oauth2client
from oauth2client import tools


CLIENT_ID = 'YOUR_CLIENT_ID'
CLIENT_SECRET = 'YOUR_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=YOUR_CLIENT_ID,
        client_secret=YOUR_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)

Ten en cuenta que SCOPE debe configurarse como se muestra. Para obtener más información acerca de YOUR_CLIENT_ID y YOUR_CLIENT_SECRET, consulta Cómo crear ID de cliente.