透過 Remote API 存取 App Engine

所有 Python 用戶端都可透過 Remote API 程式庫存取 App Engine 應用程式的可用服務。

舉例來說,如果 App Engine 應用程式使用 Cloud Datastore 或 Google Cloud Storage,Python 用戶端即可透過 Remote API 存取這些儲存空間資源。

若要存取應用程式的資料儲存庫,您可以透過 Remote API 從本機機器上執行的應用程式或從本機互動式 Remote API 殼層來執行存取作業。Remote API 會與實際服務互動,因此存取作業會用到配額與計費資源。

Python 專用的 App Engine SDK 包含 Remote API 程式庫。

啟用應用程式的 Remote API 存取

如要啟用應用程式的 Remote API,最簡單的方式是在應用程式的 app.yaml 檔案中使用 builtins 指令來指定預設網址 /_ah/remote_api/。不過,您也可以在相同檔案中使用 url 指令來指定其他網址。

builtin

app.yaml 檔案中使用 builtins 指令,可在預設網址 /_ah/remote_api 提供 Remote API:

runtime: python27
api_version: 1
threadsafe: true

builtins:
- remote_api: on

URL

app.yaml 中使用 url 指令,可指定與 Remote API 搭配使用的其他網址:

- url: /some-URL/*
  script: google.appengine.ext.remote_api.handler.application

進行這項變更後,請務必將應用程式部署至 App Engine。

使用 Remote API 殼層

Python SDK 包含 Remote API 殼層,可讓您在應用程式使用的 App Engine 服務上叫用 Python 指令。您無需額外提供任何驗證,因為這會自動使用您將應用程式上傳至 App Engine 時的相同憑證。

如要啟動 Remote API 殼層:

  1. 在本機電腦上,從終端機視窗叫用下列指令:

     [GAE-SDK-INSTALL-DIRECTORY]/remote_api_shell.py -s [YOUR-PROJECT-ID].appspot.com
    

    以 Python 專用的 App Engine SDK 的路徑取代 [GAE-SDK-INSTALL-DIRECTORY],並以專案 ID 取代 [YOUR-PROJECT-ID]

  2. 在顯示的互動式殼層中,叫用要執行的 Python 指令。舉例來說,如果應用程式使用 Cloud Datastore,您可以叫用下列 ndb 查詢來擷取 10 筆記錄:

     >>> from google.appengine.ext import ndb
     >>>
     >>> # Fetch 10 keys from the datastore
     >>> ndb.Query().fetch(10, keys_only=True)
    

在本機用戶端上使用 Remote API

您也可以在本機應用程式中使用 Remote API,以便存取在 App Engine 中執行的應用程式所使用的服務。

如要在本機應用程式上使用 Remote API:

  1. 啟用 Remote API

  2. 匯出 Python 目錄的 PYTHONPATH 環境變數,例如:

     export PYTHONPATH=/usr/somedir/v3/bin/python2.7
    

    以實際的 python 位置值取代該路徑。

  3. 將 Python 專用的 App Engine SDK 的位置新增至 PYTHONPATH

     export GAE_SDK_ROOT="/usr/local/home/mydir/google_appengine"
     export PYTHONPATH=${GAE_SDK_ROOT}:${PYTHONPATH}
    

    以 App Engine SDK 的實際路徑取代上方所示的 SDK 路徑。

  4. 在用戶端程式碼中,匯入 dev_appserver 並呼叫 dev_appserver.fix_sys_path(),確保所有的 App Engine SDK 模組均已正確匯入:

    try:
        import dev_appserver
        dev_appserver.fix_sys_path()

  5. 將下列 remote_api_stub 程式碼新增至應用程式,並確認在程式碼中傳送您的專案 ID:

    remote_api_stub.ConfigureRemoteApiForOAuth(
        '{}.appspot.com'.format(project_id),
        '/_ah/remote_api')

    如果您不是使用 Remote API 的預設網址 /_ah/remote_api,您必須變更上述程式碼以反映您使用的網址。如需 remote_api_stub.ConfigureRemoteApiForOAuth 的定義與說明文件,請參閱 SDK 檔案:[GAE-SDK-INSTALL-DIRECTORY]/google/appengine/ext/remote_api/remote_api_stub.py

  6. 新增任何所需的 App Engine 匯入項目與 Python 程式碼以存取所要的 App Engine 服務。以下程式碼範例可存取專案的資料儲存庫:

    import argparse
    
    try:
        import dev_appserver
        dev_appserver.fix_sys_path()
    except ImportError:
        print('Please make sure the App Engine SDK is in your PYTHONPATH.')
        raise
    
    from google.appengine.ext import ndb
    from google.appengine.ext.remote_api import remote_api_stub
    
    def main(project_id):
        remote_api_stub.ConfigureRemoteApiForOAuth(
            '{}.appspot.com'.format(project_id),
            '/_ah/remote_api')
    
        # List the first 10 keys in the datastore.
        keys = ndb.Query().fetch(10, keys_only=True)
    
        for key in keys:
            print(key)
    
    if __name__ == '__main__':
        parser = argparse.ArgumentParser(
            description=__doc__,
            formatter_class=argparse.RawDescriptionHelpFormatter)
        parser.add_argument('project_id', help='Your Project ID.')
    
        args = parser.parse_args()
    
        main(args.project_id)

  7. 在應用程式部署至 App Engine 的情況下,啟動 Remote API 用戶端:

     python your-client.py YOUR-PROJECT-ID
    

    以您的用戶端模組取代 your-client.py,並以您的專案 ID 取代 YOUR-PROJECT-ID。此操作的假設前提是您的用戶端依照 client.py 程式碼範例,接受專案 ID 作為指令列輸入內容。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Python 2 適用的 App Engine 標準環境