Я новичок во всем этом API, и, конечно, не понимаю всей логики c, но надеюсь, что вы можете помочь мне здесь.
Обратите внимание, что я могу предоставить только обобщенный c пример без воспроизводимого примера, так как сайт, к которому я хочу получить доступ, требует платной регистрации.
Я хочу удалить определенные значения из столбца данных на сервере.
Данные на сервере - это опрос, в котором каждый столбец представляет вопрос опроса. Теперь я хочу удалить из столбца «xyz» случай со значением «ab c».
Страница справки с указанного веб-сайта предоставляет следующую справку о том, как удалить данные:
http://release.decipherinc.com/s/local/beacon.html#data -вход-и-вывод-изменение-удаление-данных
И вот как я пытался добиться удаления данных:
library(httr)
library(tidyverse)
library(jsonlite)
my_data <- data.frame(xyz = c("abc", "def", "ghi"))
todelete <- my_data %>%
filter(xyz == "abc")
my_platform_key <- "testkey"
# small function for the URL request
api_delete <- function(path)
{
url <- paste0("release.decipherinc.com/api/v1/", path)
add_headers(my_platform_key)
DELETE(url, add_headers('x-apikey' = my_platform_key))
}
delete_request <- api_delete("surveys/MYSURVEY/data/edit?mode=delete&key=xyz&data=todelete")
Я думаю проблема может быть в том, как я задаю параметр data
. На странице справки сказано, что это должен быть массив, но не уверен, что достаточно просто передать фрейм данных.
Когда я запускаю этот код, за ним следуют: content(delete_request, encoding = "UTF-8")
код ответа 400, что указывает на то, что это не сработало (очевидно):
данные: ожидается массив, а не строка
Что мне нужно изменить в моем коде, чтобы он работал?
Обновление
Копание глубже в топи c Я нашел дополнительную информацию, но она все еще не работает. Согласно некоторому другому сообщению SO, я попробовал следующее:
library(jsonlite)
library(httr)
args <- list(key = unbox("xyz"),
data = todelete,
mode = unbox("delete"))
body <- toJSON(args)
DELETE(url = "release.decipherinc.com/api/v1/surveys/MYSURVEY/data/edit",
add_headers('x-apikey' = my_platform_key),
body = body,
encode = "json")
Я проверил содержимое body
, и оно выглядит точно так, как описано в связанной документации, но все равно не работает:
{"key":"xyz","data":[{"xyz":"abc"}],"mode":"delete"}
А ответ сервера:
Response [...URL...]
Date: 2020-04-04 17:50
Status: 400
Content-Type: application/json
Size: 72 B
{
"$error": "missing argument 'data'",
"$code": 400,
"extra": null
}