创建使用多个类实现的 API

本页介绍如何修饰您的代码,以创建使用多个类实现的 API。如果您只使用一个类来实现 API,请参阅创建 API。如需详细了解所有可用的修饰器,请参阅修饰器

api_collection = endpoints.api(name="library", version="v1.0")


@api_collection.api_class(resource_name="shelves")
class Shelves(remote.Service):
    @endpoints.method(Request, Response)
    def list(self, request):
        return Response()


@api_collection.api_class(resource_name="books", path="books")
class Books(remote.Service):
    @endpoints.method(Request, Response, path="bookmark")
    def get_bookmark(self, request):
        return Response()

    @endpoints.method(Request, Response)
    def best_sellers_list(self, request):
        return Response()

只要您为 API 中的每个类使用相同的名称,就可以将 api_collection 替换为任何您想要的名称。您必须在 API 中的每个类之前加上修饰器,如前面的代码段所示。

关于 resource_name 参数

api_class 的可选 resource_name 参数是您要在 API 中公开的类的名称;这是在 API Explorer 中显示的名称,后跟该类中公开的任何方法。

关于 path 参数

api_class 的可选 path 参数指定类方法在网址中出现的相对位置。在前面的示例中,没有为 Shelves 类指定 path,因此可以在根路径 /_ah/api/library/v1 下访问其方法。例如,可以从路径 /_ah/api/library/v1/list 访问 list 方法。

如果您为类指定了 path 参数,则指定的路径会附加到该根路径之后。在前面的示例中,为类 Books 指定了 path 参数 books,因此可以在 /_ah/api/library/v1/books 下访问其方法。例如,可以从路径 /_ah/api/library/v1/books/best_sellers_list 访问 best_sellers_list 方法。

对于方法,path 参数是可选的。如果未指定 path,则使用方法名称。为方法指定的任何路径都将附加到类路径之后。在前面的示例中,bookmark 被指定为 get_bookmark 方法的 pathget_bookmark 方法可以从路径 /_ah/api/library/v1/books/bookmark 进行访问。

您可以通过指定以 / 开头的方法 path 参数来替换类 path 参数。例如,假设 Books 类中的 get_bookmark 方法具有以下路径:

@endpoints.method(Request, Response, path='/bookmark')
def get_bookmark(self, request):
  return Response()

前导斜杠会将 get_bookmark 方法的路径更改为 /_ah/api/library/v1/bookmark

提供多类 API

在用于创建 API 服务器的 endpoints.api_server 代码中,请提供您为 api_class 集合指定的名称。例如,如果集合名称为 api_collection,请按如下方式创建服务器:

api = endpoints.api_server([api_collection])

后续步骤