创建网络服务器

您必须定义一个使用您创建的一个或多个 API 的网络服务器。 Python 版 Cloud Endpoints Frameworks 实现标准的网络服务器网关接口 (WSGI),可将对 API 的请求路由到代码中的方法。

正如在 App Engine 上运行的每个应用一样,您必须创建一个名为 app.yaml 的文件,并在该文件中配置 App Engine 应用的设置。要定义网络服务器,请更改 app.yaml 文件。

要定义网络服务器,请执行以下操作:

  1. 创建一个 Python 模块(例如 main.py),然后在顶层创建一个 endpoints.api_server 对象:

    api = endpoints.api_server([EchoApi])

    代码 api = endpoints.api_server([EchoApi]) 将创建一个 WSGI 应用,该应用可将 API 请求路由到 EchoAPI 类中的方法。

    您可以提供一个 remote.Service 对象列表(您在创建 API 时定义)给 endpoints.api_server。如果您拥有的 API 是使用多个类实现的,则您的 remote.Service 对象将是类的集合,如创建使用多个类实现的 API 中所述。

    是否为 endpoints.api_server 对象创建单独的模块取决于您创建了单个 API 还是多个 API。

    • 如果您使用多个 remote.Service 子类创建了多个 API,而且这些 API 是在多个文件中定义的,我们建议您为 endpoints.api_server 对象创建单独的模块,以便导入所有类文件。

    • 如果您创建了单个 API,则可以将所需的 endpoints.api_server 代码添加到您定义 API 的模块中,因为您不需要导入任何其他类。

  2. app.yaml 文件中,将刚创建的网络服务器映射到 Cloud Endpoints 位置,如下所示:

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

    其中,main 是您在其中定义了 endpoints.api_server 对象的 Python 模块。

从另一路径提供 API

可选:要通过其他路径(例如 /api/)提供 API,请执行以下操作:

  1. 修改修饰器:

    @endpoints.api(name='echo', version='v1', base_path='/api/')
    
  2. 更改 app.yaml 文件中的 handlers 部分:

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

Python 版 Endpoints Frameworks 中的日志记录

Python 版 Endpoints Frameworks 使用标准的 Python 日志记录模块来记录有关应用状态和请求生命周期的信息。要详细了解 App Engine 日志以及如何查看这些日志,请参阅 App Engine 文档中的读取和写入应用日志

Python 日志记录模块提供预定义的日志级别。日志级别如下(按严重程度递增顺序排列):

日志级别 说明
DEBUG 提供详细的日志。通常只有在排查问题时才设置此级别。
INFO Endpoints Frameworks 的默认日志级别。允许您跟踪大概的应用进度。
WARNING 提醒您发生了意外,但应用可以恢复并照常运行。
ERROR 提醒您发生了可能导致部分功能丢失的错误,但应用仍在运行。
CRITICAL 提醒您发生了可能导致应用关闭的严重错误或事件。

记录器是以用点分隔的层次结构形式存在的。例如,记录器 endpoints.api_config 是记录器 endpoints 的子级。您可以通过此层次结构精确控制发出或禁止哪些日志。通常,您只需更改 Endpoints Frameworks 的两个根记录器:endpointsendpoints_management

为 Endpoints Frameworks 启用 DEBUG 日志记录

为避免日志读取器过载,Endpoints Frameworks 将其记录器设置为仅记录 INFO 或更高级别的日志条目。在将 Endpoints Frameworks 导入模块之后,您可以随时按如下方式更改日志级别:

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

setLevel 方法设置的是记录器的最低日志级别。