使用 Python 適用的 Cloud Endpoints Frameworks 建立 API

API 是一項遠端程序呼叫 (RPC) 服務,為外部用戶端提供遠端方法。每個後端 API 均包含一個 RPC 服務類別以及一或多個方法,這個 RPC 服務類別會將 ProtoRPC remote.Service 類別指定為子類別。定義方法時,您也必須為傳入該方法的要求及其傳回的回應定義 Message 類別Message 類別會執行對應函式,以擷取傳入的資料並正確提供給服務方法,或正確地提供給外送回應。

如果要求具有路徑或查詢字串引數,您應使用 ResourceContainer 類別進行對應,請勿使用簡單的 Message 類別。

最後,您需要裝飾 API 服務類別和類別方法,也需要針對要求和回應定義 Message 類別。

建立 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 值。

    如果您的要求包含路徑或查詢字串引數,請使用適當的 ResourceContainer 取代 Message 類別。

    如需形成和使用 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,如建立網路伺服器一文所述。

後續步驟