選擇要傳回的欄位

呼叫 Place Details (新版) Nearby Search (新版) Text Search (新版) 方法時,您必須指定要在回應中傳回的欄位。沒有任何預設的傳回欄位清單。如果省略這份清單,方法會傳回錯誤。

如要指定欄位清單,請建立回應欄位遮罩。接著,您可以使用參數 $fieldsfields,或使用 HTTP 或 gRPC 標頭 X-Goog-FieldMask,將回應欄位遮罩傳遞至方法。

欄位遮蓋是不錯的設計做法,可確保您不要求不必要的資料,有助於避免不必要的處理時間和帳單費用。

定義回應欄位遮罩

回應欄位遮罩是以半形逗號分隔的路徑清單,其中每個路徑都會在回應訊息中指定不重複的欄位。路徑從頂層回應訊息開始,並使用以點分隔的指定欄位路徑。

按照下列方式建立欄位路徑:

topLevelField[.secondLevelField][.thirdLevelField][...]

您可以使用 * 的欄位遮罩來要求所有欄位。

如要進一步瞭解如何建構欄位遮罩,請參閱 field_mask.proto

決定要使用的欄位遮罩

以下說明如何判斷要使用的欄位遮罩:

  1. 使用 `*` 的欄位遮罩要求所有欄位。
  2. 查看回應中的欄位階層,並決定您需要的欄位。
  3. 使用欄位階層建立欄位遮罩。

定義 Nearby Search (新版) 和 Text Search (新版) 的回應欄位遮罩

Nearby Search (新版) 和 Text Search (新版) 會在回應的 places 欄位中傳回 Place 物件陣列。對於這些 API,places 是回應的頂層欄位。

舉例來說,如要查看 Text Search (新版) 的完整回應物件:

curl -X POST -d '{
  "textQuery" : "Spicy Vegetarian Food in Sydney, Australia"
}' \
-H 'Content-Type: application/json' -H 'X-Goog-Api-Key: API_KEY' \
-H 'X-Goog-FieldMask: *' \
'https://places.googleapis.com/v1/places:searchText'

Text Search (新版) 呼叫的完整回應物件格式如下:

{
  "places": [
    {
      "name": "places/ChIJs5ydyTiuEmsR0fRSlU0C7k0",
      "id": "ChIJs5ydyTiuEmsR0fRSlU0C7k0",
      "types": [
        "vegetarian_restaurant",
        "vegan_restaurant",
        "meal_takeaway",
        "restaurant",
        "food",
        "point_of_interest",
        "establishment"
      ],
      "nationalPhoneNumber": "0433 479 794",
      "internationalPhoneNumber": "+61 433 479 794",
      "formattedAddress": "29 King St, Sydney NSW 2000, Australia",
      "displayName": {
        "text": "Spiced @ Barangaroo",
        "languageCode": "en"
      },      ...
    },
  ...
  ]
}

因此,您採用下列格式為這些 API 指定欄位遮罩:

places[.secondLevelField][.thirdLevelField][...]

如果只想傳回 formattedAddressdisplayName 欄位,請將欄位遮罩設為:

places.formattedAddress,places.displayName

指定 displayName 後,系統會同時包含 displayNametextlanguage 欄位。如果只想使用 text 欄位,請將欄位遮罩設為:

places.formattedAddress,places.displayName.text

定義 Place Details 的回應欄位遮罩 (新功能)

Place Details 會以下列形式傳回單一 Place 物件:

{
  "name": "places/ChIJkR8FdQNB0VQRm64T_lv1g1g",
  "id": "ChIJkR8FdQNB0VQRm64T_lv1g1g",
  "types": [
    "locality",
    "political"
  ],
  "formattedAddress": "Trinidad, CA 95570, USA",
  "displayName": {
    "text": "Trinidad",
    "languageCode": "en"
  }
  ...
}

因此,您要指定要傳回 Place 物件的欄位,藉此為這個 API 指定欄位遮罩:

curl -X GET -H 'Content-Type: application/json' \
-H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: formattedAddress,displayName" \
https://places.googleapis.com/v1/places/ChIJj61dQgK6j4AR4GeTYWZsKWw

gRPC 呼叫

如果是 gRPC,請設定包含回應欄位遮罩的變數。接著,您可以將該變數傳送至要求。

const (
  fieldMask = "places.formattedAddress,places.displayName"
)

欄位路徑注意事項

只將您需要的欄位填入回應。只傳回所需欄位:

  • 縮短處理時間,以縮短延遲時間傳回結果。
  • 確保穩定的延遲效能:如果 API 日後會新增更多回應欄位,且這些新欄位需要額外的運算時間,如果您選取所有欄位,或選取頂層的所有欄位,且自動納入回應的所有新欄位,效能可能會降低。
  • 回應時越小,網路處理量就會越高。
  • 確保您不會要求不必要的資料,有助於避免不必要的處理時間並產生帳單費用。