Creating a Web Server

You must define a web server that uses the API or APIs you have created. Endpoints Frameworks for Python implements the standard Web Server Gateway Interface (WSGI) to route requests to your API to the methods in your code.

As with every application that runs on App Engine, you must create a file called app.yaml in which you configure your App Engine app's settings. To define the web server, you make changes to your app.yaml as described below.

To define a web server:

  1. Create a Python module, for example main.py, and create an endpoints.api_server object at the top-level:

    api = endpoints.api_server([EchoApi])

    The code api = endpoints.api_server([EchoApi]) creates a WSGI app that routes API requests to the methods in the EchoAPI class.

    You can provide a list of remote.Service objects (which you defined when you created your API) to endpoints.api_server. If you have an API that is is implemented in several classes, then your remote.Service object is a collection of classes as described in Creating an API Implemented with Multiple Classes.

    Whether you create a separate module for the endpoints.api_server object depends on whether you created a single API or multiple APIs.

    • If you are created multiple APIs (using multiple remote.Service subclasses) that are defined in multiple files, then we recommend that you create a separate module for the endpoints.api_server object so that you can import all the class files.

    • If you created a single API, you can add the required endpoints.api_server code to the module where you define your API because you don't need to import any other classes.

  2. In your app.yaml file, map the web server you just created to the endpoints location as follows:

    handlers:
    # The endpoints handler must be mapped to /_ah/api.
    - url: /_ah/api/.*
      script: main.api
    
    

    where main is the Python module you in which you defined the endpoints.api_server object.

Serving your API from a different path

Optional: To serve your API from a different path, for example /api/:

  1. Modify the decorator:

    @endpoints.api(name='echo', version='v1', base_path='/api/')
    
  2. Change the handlers section in app.yaml:

    handlers:
    - url: /api/.*
      script: main.api
    

Logging in Endpoints Framework for Python

Endpoints Framework for Python uses the standard Python logging module to log information about the application status and request lifecycle. To learn more about App Engine logs and how to view them, see Reading and Writing Application Logs in the App Engine documentation.

The Python logging module provides predefined log levels. In increasing order of severity, the log levels are:

Log Level Description
DEBUG Provides detailed logs. Typically you set this level only when troubleshooting a problem.
INFO The default log level for Endpoints Frameworks. Allows you to trace the progress of the application at a high level.
WARNING Alerts you that something unexpected happened, but the application can recover and still run normally.
ERROR Alerts you that an error happened that might cause some loss of functionality, but the application is still running.
CRITICAL Alerts you that a serious error or event happened that might cause the application to shutdown.

Loggers exist in a dot-separated hierarchy. For example, the logger endpoints.api_config is a child of the logger endpoints. This hierarchy allows you precise control over which logs are emitted or suppressed. Typically, you only change the two root loggers for Endpoints Frameworks: endpoints and endpoints_management.

Enabling DEBUG logging for Endpoints Frameworks

To avoid overloading the log reader, Endpoints Frameworks sets its loggers to only record log entries with the INFO log level or above. At any time after Endpoints Frameworks has been imported into your module, you can change the log level as follows:

import logging
logging.getLogger('endpoints').setLevel(logging.DEBUG)
logging.getLogger('endpoints_management').setLevel(logging.DEBUG)

The setLevel method sets the minimum log level for the logger.

Was this page helpful? Let us know how we did:

Send feedback about...

Cloud Endpoints Frameworks for App Engine
Need help? Visit our support page.