Обновление Zapier Storage программно - PullRequest
0 голосов
/ 24 октября 2018

Я работал с API хранилища Zapier через конечную точку store.zapier.com и успешно устанавливал и получал значения.Однако недавно я обнаружил необходимость хранить более сложную информацию, которую я хотел бы обновить с течением времени.

Данные, которые я сейчас храню, выглядят следующим образом:

{
"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"},
}

ЧтоЯ хотел бы сделать, это обновить дочернее значение due_on любого произвольного task_id_n без необходимости удалять и добавлять его снова.Читая информацию об API на store.zapier.com, я вижу, что вы можете отправить запрос исправления в сочетании с определенным действием, чтобы лучше контролировать хранимые данные.Я пытаюсь использовать запрос исправления и действие 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, но хранилище не обновляется.Есть идеи, что я могу упустить?

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

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"
        }
    }
}

Обратите внимание, что это "значения" , а не "значение"

0 голосов
/ 26 октября 2018

Мне удалось обновить определенные дочерние значения, изменив мой запрос из 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».В любом случае это подходящее решение для тех, кто сталкивается с той же проблемой.

...