GraphqlClient {ghql} | R Documentation |
GraphqlClient
Description
R6 class for constructing GraphQL queries
Value
a 'GraphqlClient' class (R6 class)
Public fields
url
(character) list of fragments
headers
list of named headers
schema
holds schema
result
holds result from http request
fragments
(list) list of fragments
Methods
Public methods
Method new()
Create a new 'GraphqlClient' object
Usage
GraphqlClient$new(url, headers)
Arguments
url
(character) URL for the GraphQL schema
headers
Any acceptable headers, a named list. See examples
Returns
A new 'GraphqlClient' object
Method print()
print method for the 'GraphqlClient' class
Usage
GraphqlClient$print(x, ...)
Arguments
x
self
...
ignored
Method ping()
ping the GraphQL server
Usage
GraphqlClient$ping(...)
Arguments
...
curl options passed on to [crul::verb-HEAD]
Returns
'TRUE' if successful response, 'FALSE' otherwise
Method load_schema()
load schema, from URL or local file
Usage
GraphqlClient$load_schema(schema_url = NULL, schema_file = NULL, ...)
Arguments
schema_url
(character) url for a schema file
schema_file
(character) path to a schema file
...
curl options passed on to [crul::verb-GET]
Returns
nothing, loads schema into '$schema' slot
Method dump_schema()
dump schema to a local file
Usage
GraphqlClient$dump_schema(file)
Arguments
file
(character) path to a file
Returns
nothing, writes schema to 'file'
Method schema2json()
convert schema to JSON
Usage
GraphqlClient$schema2json(...)
Arguments
...
options passed on to [jsonlite::toJSON()]
Returns
json
Method fragment()
load schema, from URL or local file
Usage
GraphqlClient$fragment(name, x)
Arguments
name
(character) fragment name
x
(character) the fragment
Returns
nothing returned; sets fragments internally
Method exec()
execute the query
Usage
GraphqlClient$exec(query, variables, encoding = "UTF-8", ...)
Arguments
query
(character) a query, of class 'query' or 'fragment'
variables
(list) named list with query variables values
encoding
(character) encoding to use to parse the response. passed on to [crul::HttpResponse] '$parse()' method. default: "UTF-8"
...
curl options passed on to [crul::verb-POST]
Returns
character string of response, if successful
Method prep_query()
not used right now
Usage
GraphqlClient$prep_query(query)
Arguments
query
(character) a query, of class 'query' or 'fragment'
Examples
x <- GraphqlClient$new()
x
## Not run:
# make a client
token <- Sys.getenv("GITHUB_GRAPHQL_TOKEN")
cli <- GraphqlClient$new(
url = "https://api.github.com/graphql",
headers = list(Authorization = paste0("Bearer ", token))
)
# if the GraphQL server has a schema, you can load it
cli$load_schema()
# dump schema to local file
f <- tempfile(fileext = ".json")
cli$dump_schema(file = f)
readLines(f)
jsonlite::fromJSON(readLines(f))
# after dumping to file, you can later read schema from file for faster loading
rm(cli)
cli <- GraphqlClient$new(
url = "https://api.github.com/graphql",
headers = list(Authorization = paste0("Bearer ", token))
)
cli$load_schema(schema_file = f)
# variables
cli$url
cli$schema
cli$schema$data
cli$schema$data$`__schema`
cli$schema$data$`__schema`$queryType
cli$schema$data$`__schema`$mutationType
cli$schema$data$`__schema`$subscriptionType
head(cli$schema$data$`__schema`$types)
cli$schema$data$`__schema`$directives
# methods
## ping - hopefully you get TRUE
cli$ping()
## dump schema
cli$schema2json()
## define query
### creat a query class first
qry <- Query$new()
## another
qry$query('repos', '{
viewer {
repositories(last: 10, isFork: false, privacy: PUBLIC) {
edges {
node {
isPrivate
id
name
}
}
}
}
}')
qry
qry$queries
qry$queries$repos
### execute the query
cli$exec(qry$queries$repos)
# query with a fragment
### define query without fragment, but referring to it
qry <- Query$new()
qry$query('queryfrag', '{
ropensci: repositoryOwner(login:"ropensci") {
repositories(first: 3) {
edges {
node {
...Watchers
}
}
}
}
ropenscilabs: repositoryOwner(login:"ropenscilabs") {
repositories(first: 3) {
edges {
node {
...Watchers
}
}
}
}
}')
### define a fragment
frag <- Fragment$new()
frag$fragment('Watchers', '
fragment on Repository {
watchers(first: 3) {
edges {
node {
name
}
}
}
}')
frag$fragments
frag$fragments$Watchers
### add the fragment to the query 'queryfrag'
qry$add_fragment('queryfrag', frag$fragments$Watchers)
qry
qry$queries$queryfrag
### execute query: we'll hook together the query and your fragment internally
cli$exec(qry$queries$queryfrag)
## End(Not run)