Как получать данные из Azure DocumentDB с помощью API в R

Как использовать данные JSON documentdb в фреймах данных R. Пробовал использовать простое потребление API.

library("JSON")
web_page=getURL("documentdb URI", userpwd = "abc:psswrd") 

Я также перешел по ссылке «Доступ к веб-API DocumentDB с помощью R», но не смог разобраться, как подключиться.


person Tappy    schedule 07.04.2017    source источник
comment
Обновлено с помощью образца кода.   -  person Aaron Chen    schedule 13.04.2017


Ответы (1)


Чтобы запросить ресурсы DocumentDB с помощью REST API, сначала необходимо сгенерировать заголовок аутентификации Azure documentDB для вызовов REST API. Для получения дополнительных сведений см. официальная документация и мой предыдущая запись. Во-вторых, вы можете взаимодействовать с DocumentDB, отправив HTTP-запрос с помощью пакета httr .

Для получения дополнительной информации о том, как использовать REST для запроса ресурсов DocumentDB, см. https://docs.microsoft.com/en-us/rest/api/documentdb/querying-documentdb-resources-using-the-rest-api.

Вот пример кода для вывода списка всех баз данных с использованием REST из клиента R:

library(digest)
library(base64enc)
library(httr)

Sys.setlocale("LC_TIME", "English")

endpoint = "https://{your-database-account}.documents.azure.com";
masterKey = "aTPETGJNV3u7ht9Ip2mo...";    # replace with your master key                   

currentDate <- tolower(format(Sys.time(), "%a, %d %b %Y %T", tz = "GMT", usetz = TRUE))

generateMasterKeyAuthorizationSignature <- function(verb, resourceId, resourceType) {

  key <- base64decode(masterKey)
  text <- sprintf("%s\n", paste(tolower(verb), tolower(resourceType), resourceId, currentDate, "", sep="\n"))
  body <- enc2utf8(text)
  signature <- base64encode(hmac(key, body, algo = "sha256", raw = T))
  token <- sprintf("type=master&ver=1.0&sig=%s", signature)

  return(URLencode(token, reserved = TRUE))

}


# LIST all databases

verb <- "GET"
resourceType <- "dbs"
resourceLink <- "dbs"
resourceId = ""

authHeader = generateMasterKeyAuthorizationSignature(verb, resourceId, resourceType)

headers <- c("x-ms-documentdb-isquery" = "True",
            "x-ms-date" = currentDate,
            "x-ms-version" = "2015-08-06",
            "authorization" = authHeader)

r <- GET(paste(endpoint, resourceLink, sep = "/"), add_headers(headers))
print(content(r, "text"))

ВЫПОЛНИТЬ запрос

# EXECUTE a query

databaseId <- "FamilyDB"        # replace with your database ID      
collectionId <- "FamilyColl"    # replace with your collection ID
verb <- "POST"
resourceType <- "docs"
resourceLink <- sprintf("dbs/%s/colls/%s/docs", databaseId, collectionId)
resourceId = sprintf("dbs/%s/colls/%s", databaseId, collectionId)

authHeader = generateMasterKeyAuthorizationSignature(verb, resourceId, resourceType)

headers <- c("x-ms-documentdb-isquery" = "True",
            "x-ms-date" = currentDate,
            "x-ms-version" = "2015-08-06",
            "authorization" = authHeader,
            "Content-Type" = "application/query+json")

body = list("query" = "SELECT * FROM c")            

r <- POST(paste(endpoint, resourceLink, sep = "/"), add_headers(headers), body = body, encode = "json")
print(content(r, "text"))
person Aaron Chen    schedule 10.04.2017
comment
Спасибо за помощь, я следил за вашим предыдущим блогом, теперь я могу получить сгенерированный ключ f2jgWXb2BAQUK4eVk8RSNwDu7eT / Yeq + uNFgmR4fRoNY =, после этого не могу понять, как использовать этот ключ. - @Aaron Chen - MSFT - person Tappy; 13.04.2017
comment
Хорошо, я изучил это, и я поделюсь подробностями позже сегодня. - person Aaron Chen; 13.04.2017
comment
Большое спасибо - @Aaron Chen - MSFT, все получилось. :) - person Tappy; 15.04.2017
comment
Не за что. Вы можете отметить это как ответ, который может помочь другим сообществам, которые могут столкнуться с той же проблемой. - person Aaron Chen; 16.04.2017