以编程方式更新 Zapier 存储
Updating Zapier Storage programmatically
我一直在通过 store.zapier.com 端点使用 Zapier 存储 api,并且已成功设置和检索值。然而,我最近发现需要存储更复杂的信息,我想随着时间的推移更新这些信息。
我目前存储的数据如下所示:
{
"task_id_1": {"google_id": "google_id_1", "due_on": "2018-10-24T17:00:00.000Z"},
"task_id_2": {"google_id": "google_id_2", "due_on": "2018-10-23T20:00:00.000Z"},
"task_id_3": {"google_id": "google_id_3", "due_on": "2018-10-25T21:00:00.000Z"},
}
我想做的是更新任意 task_id_n 的 "due_on" 子值,而不必再次删除和添加它。阅读 store.zapier.com 上的 API 信息,我看到您可以发送一个补丁请求并结合特定操作以更好地控制存储的数据。我尝试按如下方式使用补丁请求和 "set_child_value" 操作:
def update_child(self, parent_key, child_key, child_value):
header = self.generate_header()
data = {
"action" : "set_child_value",
"data" : {
"key" : parent_key,
"value" : {child_key : child_value}
}
}
result = requests.patch(self.URL, headers=header, json=data)
return result
当我发送此请求时,Zapier 以 200 状态代码响应,但存储未更新。有什么我可能遗漏的想法吗?
我能够通过将我的请求从 PATCH 修改为 PUT 来更新特定的子值。我不得不取消以下数据结构:
data = {
"action" : "set_child_value",
"data" : {
"key" : parent_key,
"value" : {child_key : child_value}
}
并将其发送为:
data = {
parent_key : {child_key : child_value}
}
我更新后的请求如下:
def update_child(self, parent_key, child_key, child_value):
header = self.generate_header()
data = {
parent_key : {child_key : child_value}
}
result = requests.put(self.URL, headers=header, json=data)
return result
我之前尝试的补丁方法从未真正解决问题,它确实适用于其他 Zapier 存储方法,例如 "pop_from_list" 和 "push_to_list"。无论如何,对于遇到相同问题的任何人来说,这都是一个合适的解决方案。
Zapier Store 似乎没有验证 "action" 和 "data" 字段之后的请求正文。
当您将 "data"
字段设置为数组发出请求时,您会触发一个验证错误,该错误描述了数据字段的架构(查找 API 文档的一种方式!smh).
在请求正文中,"set_child_value" 操作的数据字段架构是:
{
"action" : {
"enum": [
"delete",
"increment_by",
"set_child_value",
"list_pop",
"set_value_if",
"remove_child_value",
"list_push"
]
},
"data" : {
"key" : {
"type": "object"
},
"values" : {
"type": "object"
}
}
}
注意是 "values" 而不是 "value"
我一直在通过 store.zapier.com 端点使用 Zapier 存储 api,并且已成功设置和检索值。然而,我最近发现需要存储更复杂的信息,我想随着时间的推移更新这些信息。
我目前存储的数据如下所示:
{
"task_id_1": {"google_id": "google_id_1", "due_on": "2018-10-24T17:00:00.000Z"},
"task_id_2": {"google_id": "google_id_2", "due_on": "2018-10-23T20:00:00.000Z"},
"task_id_3": {"google_id": "google_id_3", "due_on": "2018-10-25T21:00:00.000Z"},
}
我想做的是更新任意 task_id_n 的 "due_on" 子值,而不必再次删除和添加它。阅读 store.zapier.com 上的 API 信息,我看到您可以发送一个补丁请求并结合特定操作以更好地控制存储的数据。我尝试按如下方式使用补丁请求和 "set_child_value" 操作:
def update_child(self, parent_key, child_key, child_value):
header = self.generate_header()
data = {
"action" : "set_child_value",
"data" : {
"key" : parent_key,
"value" : {child_key : child_value}
}
}
result = requests.patch(self.URL, headers=header, json=data)
return result
当我发送此请求时,Zapier 以 200 状态代码响应,但存储未更新。有什么我可能遗漏的想法吗?
我能够通过将我的请求从 PATCH 修改为 PUT 来更新特定的子值。我不得不取消以下数据结构:
data = {
"action" : "set_child_value",
"data" : {
"key" : parent_key,
"value" : {child_key : child_value}
}
并将其发送为:
data = {
parent_key : {child_key : child_value}
}
我更新后的请求如下:
def update_child(self, parent_key, child_key, child_value):
header = self.generate_header()
data = {
parent_key : {child_key : child_value}
}
result = requests.put(self.URL, headers=header, json=data)
return result
我之前尝试的补丁方法从未真正解决问题,它确实适用于其他 Zapier 存储方法,例如 "pop_from_list" 和 "push_to_list"。无论如何,对于遇到相同问题的任何人来说,这都是一个合适的解决方案。
Zapier Store 似乎没有验证 "action" 和 "data" 字段之后的请求正文。
当您将 "data"
字段设置为数组发出请求时,您会触发一个验证错误,该错误描述了数据字段的架构(查找 API 文档的一种方式!smh).
在请求正文中,"set_child_value" 操作的数据字段架构是:
{
"action" : {
"enum": [
"delete",
"increment_by",
"set_child_value",
"list_pop",
"set_value_if",
"remove_child_value",
"list_push"
]
},
"data" : {
"key" : {
"type": "object"
},
"values" : {
"type": "object"
}
}
}
注意是 "values" 而不是 "value"