建立在多個類別實作的 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_collection 替換為您想使用的任何名稱,只要 API 中每個類別的名稱都相同即可。您必須在 API 中的各個類別前面加上裝飾器,如上方的程式碼片段所示。

關於 resource_name 引數

api_class 的選用 resource_name 引數,即為您想要在 API 中公開的類別名稱;此名稱會顯示於 API Explorer,且會加在該類別中所有公開方法的前面。

關於 path 引數

api_class 的選用 path 引數,會指定類別方法在網址中的相對顯示位置。在前述範例中,並未針對 Shelves 類別指定 path,因此您可在根目錄 /_ah/api/library/v1 下方存取其方法。舉例來說,list 方法可透過 路徑 /_ah/api/library/v1/list 來存取。

如果您為類別指定 path 引數,指定的路徑會附加到根目錄後方。在上述範例中,對類別 Books 指定了 path 引數 books,因此可在 /_ah/api/library/v1/books 下方存取其方法。舉例來說,best_sellers_list 方法可透過路徑 /_ah/api/library/v1/books/best_sellers_list 來存取。

對於方法而言,path 是選用引數。如果未指定 path,則會使用方法名稱。為方法指定的任何路徑都將附加至類別路徑後方。在上述範例中,針對 get_bookmark 方法,指定了 bookmark 做為 path。您可從 /_ah/api/library/v1/books/bookmark 路徑存取 get_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])

後續步驟