您的入口網站提供一個特別的 API,可用於同步處理自訂內容。如要呼叫這個 API,您必須:
- 手動同步處理自訂內容至少一次。
- 使用適當的授權和金鑰建立服務帳戶。
- 發出 HTTP 要求以同步處理您的內容。
本文件說明如何建立服務帳戶,並提供透過 Python 或指令列發出要求的範例。
建立已授權的服務帳戶
如要使用 API 來同步處理您的自訂內容,您需要具有適當授權與金鑰的服務帳戶。如要建立服務帳戶、授予服務帳戶適當角色,並取得所需的金鑰檔案,請按照下列說明進行操作:
主控台
在 GCP 主控台中,開啟「Service Accounts」(服務帳戶) 頁面。
按一下 [Select a project] (選取專案)。
選取您的專案並按一下 [Open] (開啟)。
按一下
[Create Service Account] (建立服務帳戶)。在「Service account name」(服務帳戶名稱) 欄位,為您的服務帳戶輸入顯示名稱。
選取 [Furnish a new private key] (提供一組新的私密金鑰) 核取方塊。
針對「Key type」(金鑰類型),請使用預設類型「JSON」。
按一下 [Save] (儲存)。
畫面上會顯示包含金鑰資訊的對話方塊,請關閉對話方塊以繼續操作。
在 GCP 主控台中,前往您專案的「Endpoints」>「Services」(服務) 頁面。
找出您要同步處理自訂內容的 API,然後按一下該 API 的名稱來變更其存取權限。
如果「Permissions」(權限) 側邊面板未開啟,請按一下 [+Permissions] (+權限)。
如要為建立的服務帳戶授予 API 存取權,請在「Add members」(新增成員) 欄位中輸入建立的服務帳戶電子郵件地址。
在「Select a role」(請選擇角色) 下拉式選單中,按一下 [Service Management] (服務管理),然後為該服務帳戶選取 [Service Config Editor] (服務設定編輯者) 角色。
恭喜!您建立了服務帳戶、將帳戶的私密金鑰下載到 JSON 檔案,並為服務帳戶指派了適當的角色。
gcloud
輸入下列指令以顯示 Google Cloud Platform (GCP) 專案的專案 ID:
gcloud projects list
替換下列指令中的
[YOUR_PROJECT_ID]
,將預設專案設為您 API 所在的專案:gcloud config set project [YOUR_PROJECT_ID]
確認 Cloud SDK (gcloud) 已取得授權,可存取您在 GCP 上的資料與服務:
gcloud auth login
如果您有多個帳戶,請務必選擇 API 所屬 GCP 專案中的帳戶。如果您執行
gcloud auth list
,則您選取的帳戶會顯示為專案的有效帳戶。如要建立服務帳戶,請執行下列指令,並將
[SERVICE_ACCOUNT_NAME]
和[Service Account to Sync Custom Content]
替換為您要使用的名稱及顯示名稱:gcloud iam service-accounts create [SERVICE_ACCOUNT_NAME] \ --display-name "[Service Account to Sync Custom Content]"
這個指令會為服務帳戶指派採下列格式的電子郵件地址:
[SERVICE_ACCOUNT_NAME]@[YOUR_PROJECT_ID].iam.gserviceaccount.com
後續指令會用到這個電子郵件地址。
建立服務帳戶金鑰檔案,將
[KEY_FILE]
替換為您金鑰的檔案名稱:gcloud iam service-accounts keys create ~/[KEY_FILE] \ --iam-account [SERVICE_ACCOUNT_NAME]@[YOUR_PROJECT_ID].iam.gserviceaccount.com
如要允許服務帳戶存取包含自訂內容的 API,請執行下列指令,並將其中的
[YOUR_SERVICE_NAME]
替換為包含自訂內容的 API 名稱:gcloud endpoints services add-iam-policy-binding [SERVICE-NAME] \ --member=serviceAccount:[SERVICE_ACCOUNT_NAME]@[YOUR_PROJECT_ID].iam.gserviceaccount.com \ --role roles/servicemanagement.configEditor
傳送要求以同步處理自訂內容
下列範例說明如何發出同步處理自訂內容的要求。要求類似於下列內容:
POST https://endpointsportal.[YOUR_PROJECT_ID].cloud.goog/api/v1/[YOUR_SERVICE_NAME]/custom-content/
請將 [YOUR_PROJECT_ID]
與 [YOUR_SERVICE_NAME]
替換為適當的值。要求成功完成後,回應的 HTTP 狀態碼為 200
。
接下來的範例將示範如何從 Google 的授權伺服器取得存取憑證,並透過 Python 或指令列,使用該憑證向您的入口網站端點發送要求:
Python
- 安裝所需的 Python 程式庫:
pip install --upgrade google-auth
- 如要從服務帳戶憑證和端點所需範圍建立
Credentials
物件,並發出要求以同步處理內容,請將下列指令碼的[YOUR_PROJECT_ID]
、/path/to/service.json
及[YOUR_SERVICE_NAME]
替換為適當的值:from google.oauth2 import service_account from google.auth.transport.requests import AuthorizedSession SCOPES = ["https://www.googleapis.com/auth/service.management.readonly"] SERVICE_ACCOUNT_FILE = "/path/to/service.json" PROJECT_ID = "[YOUR_PROJECT_ID]" SERVICE_NAME = "[YOUR_SERVICE_NAME]" credentials = service_account.Credentials.from_service_account_file( SERVICE_ACCOUNT_FILE, scopes=SCOPES) authed_session = AuthorizedSession(credentials) endpoint = "https://endpointsportal.%s.cloud.goog/api/v1/%s/custom-content" % (PROJECT_ID, SERVICE_NAME) result = authed_session.post(endpoint) print result
指令列
- 開啟 Cloud Shell;如果您在 Linux 電腦上安裝了 Cloud SDK,請開啟終端機視窗。
- 如要驗證您的服務帳戶,請將下方指令中的
[KEY_FILE]
替換為服務帳戶金鑰檔案的路徑後,然後執行指令:gcloud auth activate-service-account --key-file [KEY_FILE]
- 使用您的服務帳戶以取得授權憑證:
ACCESS_TOKEN=$(gcloud auth print-access-token)
- 呼叫 API 時,將憑證值做為不記名憑證傳送到授權標頭中。請將
[YOUR_PROJECT_ID]
與[YOUR_SERVICE_NAME]
替換為適當的值:curl -X POST -H "Authorization: Bearer ${ACCESS_TOKEN}" \ https://endpointsportal.[YOUR_PROJECT_ID].cloud.goog/api/v1/[YOUR_SERVICE_NAME]/custom-content