Как я могу получить частичный ответ для метода: instance.aggregatedList Compute API в GCP
Я пытаюсь получить конкретный ответ от метода Compute API
instances.aggregatedList
установив
fields
параметр запроса согласно https://cloud.google.com/resource-manager/docs/performance#partial-response
Но я получаю
400 BAD REQUEST
.
Есть ли образец, по которому я могу получить частичный ответ для агрегированных методов?
1 ответ
Если вы используете следующую команду CURL:
curl -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) "https://compute.googleapis.com/compute/v1/projects/[CHANGE-FOR-YOUR-PROJECT-ID]/aggregated/instances?maxResults=1"
Вы заметите, что результат будет иметь форму, похожую на:
{
"id": "projects/[PROJECT-ID]/aggregated/instances",
"items": {
"zones/us-central1-a": {
"instances": [
{
"id": "[INSTANCE-ID]",
"creationTimestamp": "2020-09-21T06:22:21.604-07:00",
"name": "instance-1",
"description": "",
"tags": {
"items": [
"http-server",
"https-server"
],
"fingerprint": "XXXXXX"
},
"machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT-ID]/zones/us-central1-a/machineTypes/e2-medium",
"status": "RUNNING",
"zone": "https://www.googleapis.com/compute/v1/projects/[PROJECT-ID]/zones/us-central1-a",
"canIpForward": false,
"networkInterfaces": [
{
"network": "https://www.googleapis.com/compute/v1/projects/[PROJECT-ID]/global/networks/default",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/[PROJECT-ID]/regions/us-central1/subnetworks/[SUBNETWORK_NAME]",
"networkIP": "10.8.0.13",
"name": "nic0",
... with a lot more fields
Как видите, результат немного отличается от тела ответа, описанного в документации :
{
"id": string,
"items": [
{
"scopeName": string,
"instances": [
{
"id": string,
"creationTimestamp": string,
"name": string,
"description": string,
"tags": {
"items": [
string
],
"fingerprint": string
},
"machineType": string,
"status": enum,
"statusMessage": string,
"zone": string,
"canIpForward": boolean,
"networkInterfaces": [
{
"network": string,
"subnetwork": string,
"networkIP": string,
"ipv6Address": string,
"name": string,
.... with a lot more fields
Обратите внимание, что если вы сравните оба результата, в фактическом ответе, который вы получите, будет дополнительный
"zones/us-central1-a":
поле перед
instances:
поле, которое, как я полагаю, вызывает поведение, которое вы испытываете.
Если вы заинтересованы в работе с частичными ресурсами и получаете только некоторые определенные поля в ответе, вам просто нужно соблюдать правила синтаксиса, описанные в документации, которой вы поделились, и соответственно использовать escape-символы в параметрах запроса.
Например, если вы заинтересованы только в получении
id
вашего проекта, а также
instances
'
name
,
machineType
и
status
Я протестировал следующую команду curl из Cloud Shell с моим проектом GCP, и она работала без проблем:
curl -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) "https://compute.googleapis.com/compute/v1/projects/[PROJECT-ID]/aggregated/instances?fields=id,items/zones%2Finstances(name,machineType,status)"
где я вижу, что возвращается что-то похожее на следующее:
{
"id": "projects/[PROJECT-ID]/aggregated/instances",
"items": {
"zones/us-central1-a": {
"instances": [
{
"name": "instance-1",
"machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT-ID]/zones/us-central1-a/machineTypes/e2-medium",
"status": "RUNNING"
},
{
"name": "instance-2",
"machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT-ID]/zones/us-central1-a/machineTypes/e2-medium",
"status": "TERMINATED"
}
]
}
}
}