Python 以编程方式更新Zapier存储

Python 以编程方式更新Zapier存储,python,python-requests,zapier,Python,Python Requests,Zapier,我一直在通过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

我一直在通过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"},
}
我想做的是更新任意任务id的“due_on”子值,而不必删除并再次添加它。阅读store.zapier.com上的API信息,我发现您可以发送一个补丁请求,并结合一个特定的操作来更好地控制存储的数据。我尝试使用补丁请求和“设置子值”操作,如下所示:

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状态代码响应,但存储未更新。知道我可能缺少什么吗?

通过将请求从补丁修改为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似乎没有通过“操作”和“数据”字段验证请求正文

当您使用设置为数组的
“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"
        }
    }
}

请注意,它是“值”而不是“值”

是的,问题是我没有设置“值”!我在各种尝试中都能找到相同的文档,但它不是特别清楚。谢谢你指出这一点。我将选择你的答案,因为它是我问题的正确答案。也就是说,我找到的解决方案更适合我,因为它允许我在一次调用中更新多个值。再次感谢,很好!很高兴您找到了适合您的用例的更好的方法。