【发布时间】:2021-12-09 12:10:01
【问题描述】:
我正在尝试使用以下 API: https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.accessLevels/patch
我的目标很简单:在 GCP 的后端更新(“补丁”)一个“AccessLevel”对象。
我正在使用 Google Apps 脚本中的“UrlFetchApp.fetch”方法调用 API:
var result = UrlFetchApp.fetch('https://accesscontextmanager.googleapis.com/v1/accessPolicies/12345678/accessLevels/User_A_Home_IP?updateMask=updateMask',options);
其中“选项”(作为 url 端点后的第二个参数传递)是:
var options =
{
method: 'PATCH',
headers: {
'Authorization': 'Bearer ' + ScriptApp.getOAuthToken(),
'Content-Type' : 'application/json',
},
payload : JSON.stringify(payload),
muteHttpExceptions : true,
"updateMask" : "*"
}
而“有效载荷”是:
var payload=
{
"basic": {
"combiningFunction": "OR",
"conditions": [
{
"ipSubnetworks": [
"11.12.13.14/32"
]
}
]
},
"name": "accessPolicies/12345678/accessLevels/User_A_Home_IP",
"title": "User A Home IP"
}
我得到的结果是:
{
"error": {
"code": 400,
"message": "Invalid update_mask. All paths must be in the AccessLevel message.",
"status": "INVALID_ARGUMENT"
}
}
根据文档(本文中的第一个链接) 请求正文应包含 AccessLevel 的实例(这是我的代码中的“有效负载”对象) 还需要一个“updateMask”查询参数,它指示后端目标 json 对象的哪些字段得到更新。
updateMask,如果我理解正确的话 - 属于 FieldMask 类型: https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMask
我只需要更新在“ipSubnetworks”字符串数组中找到的单个 IP 地址,该地址又位于“条件”对象数组中,该数组又嵌套在“基本”对象下。
在这种情况下,updateMask 的正确语法是什么?
updateMask 应该位于我的“PATCH”请求中的什么位置?
【问题讨论】:
标签: google-apps-script google-cloud-platform google-api