使用 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 服务,具体请参阅创建网络服务器

后续步骤