Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A Ruby library for declaring, composing and executing GraphQL queries

License

NotificationsYou must be signed in to change notification settings

github-community-projects/graphql-client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GraphQL Client is a Ruby library for declaring, composing and executing GraphQL queries.

Usage

Installation

Addgraphql-client to your Gemfile and then runbundle install.

# Gemfilegem'graphql-client'

Configuration

Sample configuration for a GraphQL Client to query from theSWAPI GraphQL Wrapper.

require"graphql/client"require"graphql/client/http"# Star Wars API example wrappermoduleSWAPI# Configure GraphQL endpoint using the basic HTTP network adapter.HTTP=GraphQL::Client::HTTP.new("https://example.com/graphql")dodefheaders(context)# Optionally set any HTTP headers{"User-Agent":"My Client"}endend# Fetch latest schema on init, this will make a network requestSchema=GraphQL::Client.load_schema(HTTP)# However, it's smart to dump this to a JSON file and load from disk## Run it from a script or rake task#   GraphQL::Client.dump_schema(SWAPI::HTTP, "path/to/schema.json")## Schema = GraphQL::Client.load_schema("path/to/schema.json")Client=GraphQL::Client.new(schema:Schema,execute:HTTP)end

Defining Queries

If you haven't already,familiarize yourself with the GraphQL query syntax. Queries are declared with the same syntax inside of a<<-'GRAPHQL' heredoc. There isn't any special query builder Ruby DSL.

This client library encourages all GraphQL queries to be declared statically and assigned to a Ruby constant.

HeroNameQuery=SWAPI::Client.parse<<-'GRAPHQL'  query {    hero {      name    }  }GRAPHQL

Queries can reference variables that are passed in at query execution time.

HeroFromEpisodeQuery=SWAPI::Client.parse<<-'GRAPHQL'  query($episode: Episode) {    hero(episode: $episode) {      name    }  }GRAPHQL

Fragments are declared similarly.

HumanFragment=SWAPI::Client.parse<<-'GRAPHQL'  fragment on Human {    name    homePlanet  }GRAPHQL

To include a fragment in a query, reference the fragment by constant.

HeroNameQuery=SWAPI::Client.parse<<-'GRAPHQL'  {    luke: human(id: "1000") {      ...HumanFragment    }    leia: human(id: "1003") {      ...HumanFragment    }  }GRAPHQL

This works for namespaced constants.

moduleHeroQuery=SWAPI::Client.parse<<-'GRAPHQL'    {      luke: human(id: "1000") {        ...Human::Fragment      }      leia: human(id: "1003") {        ...Human::Fragment      }    }  GRAPHQLend

:: is invalid in regular GraphQL syntax, but#parse makes an initial pass on the query string and resolves all the fragment spreads withconstantize.

Executing queries

Pass the reference of a parsed query definition toGraphQL::Client#query. Data is returned back in a wrappedGraphQL::Client::Schema::ObjectType struct that provides Ruby-ish accessors.

result=SWAPI::Client.query(Hero::Query)# The raw data is Hash of JSON values# result["data"]["luke"]["homePlanet"]# The wrapped result allows to you access data with Ruby methodsresult.data.luke.home_planet

GraphQL::Client#query also accepts variables and context parameters that can be leveraged by the underlying network executor.

result=SWAPI::Client.query(Hero::HeroFromEpisodeQuery,variables:{episode:"JEDI"},context:{user_id:current_user_id})

Rails ERB integration

If you're using Ruby on Rails ERB templates, theres a ERB extension that allows static queries to be defined in the template itself.

In standard Ruby you can simply assign queries and fragments to constants and they'll be available throughout the app. However, the contents of an ERB template is compiled into a Ruby method, and methods can't assign constants. So a new ERB tag was extended to declare static sections that include a GraphQL query.

<%# app/views/humans/human.html.erb%><%graphql  fragment HumanFragment on Human {    name    homePlanet  }%><p><%=human.name%> lives on<%=human.home_planet%>.</p>

These<%graphql sections are simply ignored at runtime but make their definitions available through constants. The module namespacing is derived from the.erb's path plus the definition name.

>> "views/humans/human".camelize=> "Views::Humans::Human">> Views::Humans::Human::HumanFragment=> #<GraphQL::Client::FragmentDefinition>

Examples

github/github-graphql-rails-example is an example application using this library to implement views on the GitHub GraphQL API.

Installation

Addgraphql-client to your app's Gemfile:

gem'graphql-client'

See Also

About

A Ruby library for declaring, composing and executing GraphQL queries

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

No packages published

Contributors51


[8]ページ先頭

©2009-2025 Movatter.jp