使用 Python 版 Cloud Endpoints Frameworks 创建 API

API 是一项远程过程调用 (RPC) 服务,它提供了外部客户端可以访问的远程方法。每个后端 API 均包含一个 RPC 服务类(它是 ProtoRPC remote.Service 类的子类)以及一个或多个方法。定义方法时,您还必须为传入该方法的请求以及该方法返回的响应定义 MessageMessage 类会执行映射功能,因此系统能够提取传入数据,并将这些数据提供给适当的服务方法,或提供给适当的传出响应。

如果请求包含路径或查询字符串参数,那么您需要使用 ResourceContainer 类进行映射,而不是使用简单的 Message 类。

最后,您需要修饰 API 服务类和类方法,并且需要为请求和响应定义 Message 类。

创建 API

以下过程演示了如何修饰您的代码,以创建在单个类中实现的 API。如果您的 API 是多类 API,请参阅创建使用多个类实现的 API。 如需详细了解所有可用的修饰器,请参阅修饰器

要创建 API,请执行以下操作:

  1. 添加以下必要的导入:

    import endpoints
    from endpoints import message_types
    from endpoints import messages
    from endpoints import remote
    
  2. 定义 remote.Service 的子类,并使用 @endpoints.api 对其进行修饰:

    @endpoints.api(name="echo", version="v1")
    class EchoApi(remote.Service):

    请注意,您的 API 名称和服务类名称不必相同。版本号适用于 API 的版本。您输入的值将成为 API 网址中路径的一部分。如需详细了解版本,请参阅处理 API 版本控制

  3. 确定您的方法要求请求中包含哪些数据以及返回哪些数据,并为请求正文和响应正文创建 Message

    class EchoRequest(messages.Message):
        message = messages.StringField(1)
    
    class EchoResponse(messages.Message):
        """A proto Message that contains a simple string field."""
    
        message = messages.StringField(1)
    
    ECHO_RESOURCE = endpoints.ResourceContainer(
        EchoRequest, n=messages.IntegerField(2, default=1)
    )

    请注意,如果请求正文中未显示参数(例如在 GET 请求中),那么您可以省略该请求的 Message 类,而只需使用值 message_types.VoidMessage

    如果您的请求包含路径或查询字符串参数,请将 Message 类替换为相应的 ResourceContainer

    如需全面了解如何构建和使用 Message 类,请参阅 Google Protocol RPC 响应和请求 Message 类的相关文档。

  4. 为您的 API 创建方法,并使用 @endpoints.method 对其进行修饰:

    @endpoints.method(
            # This method takes a ResourceContainer defined above.
            ECHO_RESOURCE,
            # This method returns an Echo message.
            EchoResponse,
            path="echo",
            http_method="POST",
            name="echo",
        )
        def echo(self, request):

    如果您的请求包含路径或查询字符串数据,请将请求消息类型替换为相应的 ResourceContainer

  5. 添加代码以提供您的 API,具体请参阅创建网络服务器

后续步骤