建立網路伺服器

網路伺服器若以您所建立的 API 運作,您必須加以定義。Python 適用的 Cloud Endpoints Frameworks 實作標準網路伺服器閘道介面 (WSGI),透過程式碼將 API 的要求轉送至方法。

您必須建立一個名為 app.yaml 的檔案,並在該檔案中進行 App Engine 應用程式的設定,就像在 App Engine 上執行的每個應用程式一樣。如要定義網路伺服器,請變更 app.yaml 檔案。

如要定義網路伺服器:

  1. 建立一個 Python 模組 (例如 main.py),並在頂層建立一個 endpoints.api_server 物件:

    api = endpoints.api_server([EchoApi])

    程式碼 api = endpoints.api_server([EchoApi]) 會建立 WSGI 應用程式,以將 API 要求轉送至 EchoAPI 類別中的方法。

    您可以將 remote.Service 物件清單 (您在建立 API 時所定義) 提供給 endpoints.api_server。如果您有一個 API 在多個類別中實作,則您的 remote.Service 物件會是一個類別集合,如建立在多個類別實作的 API 一文所述。

    是否要為 endpoints.api_server 物件建立不同的模組,視您建立單一 API 或多個 API 而定。

    • 如果您使用了多個 remote.Service 子類別建立在多個檔案中定義的多個 API,我們建議您為 endpoints.api_server 物件另外建立一個模組,以便匯入所有類別檔案。

    • 如果您建立了單一 API,則可將所需的 endpoints.api_server 程式碼新增至您定義 API 的模組中,因為您無需匯入任何其他類別。

  2. app.yaml 檔案中,將您剛建立的網路伺服器對應至 Cloud Endpoints 位置,如下所示:

    handlers:
    # The endpoints handler must be mapped to /_ah/api.
    - url: /_ah/api/.*
      script: main.api
    
    

    其中 main 是您用來定義 endpoints.api_server 物件的 Python 模組。

透過不同的路徑提供 API

選用:如要從不同的路徑 (例如 /api/) 提供您的 API:

  1. 修改修飾符:

    @endpoints.api(name='echo', version='v1', base_path='/api/')
    
  2. 變更 app.yaml 檔案中的 handlers 區段:

    handlers:
    - url: /api/.*
      script: main.api
    

Python 適用的 Endpoints Frameworks 中的記錄

Python 適用的 Endpoints Frameworks 使用標準 Python 記錄模組記錄應用程式狀態和要求生命週期的相關資訊。如要進一步瞭解 App Engine 記錄及其查看方式,請參閱 App Engine 說明文件中的「讀取及寫入應用程式記錄」一文。

Python 記錄模組提供預先定義的記錄層級。以下為記錄層級,越下面越嚴重:

記錄層級 說明
DEBUG 提供詳細的記錄。通常只有在排解問題時才會設定此層級。
INFO Endpoints Frameworks 預設的記錄層級。可讓您在較高層級追蹤應用程式的進度。
WARNING 提醒您發生未預期問題,但應用程式可以復原並且仍正常執行。
ERROR 提醒您發生錯誤,可能喪失一些功能,但應用程式仍在執行。
CRITICAL 提醒您發生了嚴重錯誤或事件,可能導致應用程式關閉。

記錄器存在於以點分隔的階層中。例如,endpoints.api_config 記錄器是 endpoints 記錄器的子項。此階層可讓您精確控制要發出或抑制哪些記錄。通常您只會變更 Endpoints Frameworks 的兩個根記錄器:endpointsendpoints_management

為 Endpoints Frameworks 啟用 DEBUG 記錄

為避免記錄讀取器超載,Endpoints Frameworks 會將其記錄器設定為僅記錄 INFO 或以上記錄層級的記錄項目。將 Endpoints Frameworks 匯入您的模組後,您就可以隨時變更記錄層級,如下所示:

import logging
logging.getLogger('endpoints').setLevel(logging.DEBUG)
logging.getLogger('endpoints_management').setLevel(logging.DEBUG)

setLevel 方法會設定記錄器的最低記錄層級。