有没有办法使用 sdk 更新 api 键值?
Is there a way to update api key value using sdk?
我需要使用我的 lambda 函数更新 api 键值。
我查看了 API Gateway SDK Documentation,我认为 updateApiKey 是最好的选择,但是当我发送请求时,我收到一个错误 return:
BadRequestException: Invalid patch path 'value' specified for op 'replace'. Must be one of: [/description, /enabled, /name, /customerId]
at Object.extractError (/var/task/node_modules/aws-sdk/lib/protocol/json.js:51:27)
at Request.extractError (/var/task/node_modules/aws-sdk/lib/protocol/rest_json.js:55:8)
at Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
at Request.emit (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (/var/task/node_modules/aws-sdk/lib/request.js:683:14)
at Request.transition (/var/task/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/var/task/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /var/task/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:685:12)
基本上是说我无法更新"value",所以我不能做我需要的
现在,我的代码是:
let sendPromise = null;
let params = {
"apiKey": "xxxxxxxxx",
patchOperations: [
{
op: "replace",
path: "value",
value: "teste123"
}
]
};
sendPromise = new AWS.APIGateway().updateApiKey( params ).promise();
try {
const data = await sendPromise;
return criarResposta( 200, `{
"message": "OK"
}` );
} catch (err) {
console.error(err, err.stack);
return criarResposta( 500, err.stack );
}
有没有其他函数可以更新api键值?
没有其他函数可以更新 api 键值。我认为这是设计使然。
我不确定这一点,但有 证据 表明 AWS 设计了 apikey 资源的值属性不可变:
- ApiGateway 的 AWS REST api 是支持最大可用操作子集的服务端点。 REST api 文档中列出了支持修改的属性:
/customerId
、/description
、/enabled
、/labels
、/name
、/stages
. [1]
- AWS 管理控制台也不支持修改api键值。只有 'show' api 键值的选项。
所以如果你想改变这个值,你必须删除现有的 apikey 并创建一个新的。这包括重新创建所有 usageplankey 资源,这些资源将 apikey 资源与 usageplan 资源相关联。
参考资料
[1] https://docs.aws.amazon.com/apigateway/api-reference/link-relation/apikey-update/#remarks
我需要使用我的 lambda 函数更新 api 键值。
我查看了 API Gateway SDK Documentation,我认为 updateApiKey 是最好的选择,但是当我发送请求时,我收到一个错误 return:
BadRequestException: Invalid patch path 'value' specified for op 'replace'. Must be one of: [/description, /enabled, /name, /customerId]
at Object.extractError (/var/task/node_modules/aws-sdk/lib/protocol/json.js:51:27)
at Request.extractError (/var/task/node_modules/aws-sdk/lib/protocol/rest_json.js:55:8)
at Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
at Request.emit (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (/var/task/node_modules/aws-sdk/lib/request.js:683:14)
at Request.transition (/var/task/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/var/task/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /var/task/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:685:12)
基本上是说我无法更新"value",所以我不能做我需要的
现在,我的代码是:
let sendPromise = null;
let params = {
"apiKey": "xxxxxxxxx",
patchOperations: [
{
op: "replace",
path: "value",
value: "teste123"
}
]
};
sendPromise = new AWS.APIGateway().updateApiKey( params ).promise();
try {
const data = await sendPromise;
return criarResposta( 200, `{
"message": "OK"
}` );
} catch (err) {
console.error(err, err.stack);
return criarResposta( 500, err.stack );
}
有没有其他函数可以更新api键值?
没有其他函数可以更新 api 键值。我认为这是设计使然。
我不确定这一点,但有 证据 表明 AWS 设计了 apikey 资源的值属性不可变:
- ApiGateway 的 AWS REST api 是支持最大可用操作子集的服务端点。 REST api 文档中列出了支持修改的属性:
/customerId
、/description
、/enabled
、/labels
、/name
、/stages
. [1] - AWS 管理控制台也不支持修改api键值。只有 'show' api 键值的选项。
所以如果你想改变这个值,你必须删除现有的 apikey 并创建一个新的。这包括重新创建所有 usageplankey 资源,这些资源将 apikey 资源与 usageplan 资源相关联。
参考资料
[1] https://docs.aws.amazon.com/apigateway/api-reference/link-relation/apikey-update/#remarks