Выборка JSON с помощью GET из API на основе GraphQL невозможна?

#r #get #graphql #httr

#r #получить #graphql #httr

Вопрос:

Я пытаюсь запросить RCSB GraphQL API, чтобы получить информацию о структурах белка. Я делаю это как часть автоматизированного скрипта. Ранее я использовал их Search API, который, однако, они закрывают в декабре. Обычно использование httr всегда работало для меня, но я чувствую, что в этом случае я что-то упускаю.

Первый пример, который они предлагают на своем веб-сайте (https://data.rcsb.org/#rest-api ) заключается в следующем:

 https://data.rcsb.org/graphql?query={entry(entry_id:"4HHB"){exptl{method}}}
  

В браузере я могу легко получить нужную информацию с помощью этого (https://data.rcsb.org/graphql ?query={entry(entry_id:»4HHB»){exptl{method}}}), однако, когда я пытаюсь сделать это из R, я получаю сообщение об ошибке клиента 400 Bad Request.

 library(httr)
query <- 'query={entry(entry_id:"4HHB"){exptl{method}}}'
r <- GET(modify_url("https://data.rcsb.org/graphql", query = query))
http_status(r)
  
 $category
[1] "Client error"

$reason
[1] "Bad Request"

$message
[1] "Client error: (400) Bad Request"
  

Я также пробовал много разных вещей, но я не могу заставить это как-то работать. Я относительно новичок в этом, поэтому, возможно, кто-то может заметить явную ошибку. Было бы здорово получить некоторую помощь!

Ответ №1:

Запрос должен быть закодирован в URL

 library(httr)
query <- URLencode('query={entry(entry_id:"4HHB"){exptl{method}}}')
r <- GET(modify_url("https://data.rcsb.org/graphql", query = query))
http_status(r)
#> $category
#> [1] "Success"
#> 
#> $reason
#> [1] "OK"
#> 
#> $message
#> [1] "Success: (200) OK"
  

Комментарии:

1. Отлично, что работает. Большое спасибо! Я пробовал это раньше, но, должно быть, в коде была другая ошибка.