Security News
Fluent Assertions Faces Backlash After Abandoning Open Source Licensing
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
graphql-remote_loader
Advanced tools
Performant, batched GraphQL queries from within the resolvers of a graphql-ruby
API.
field :login, String, null: false, description: "The currently authenticated GitHub user's login."
def login
GitHubLoader.load("viewer { login }").then do |results|
if results["errors"].present?
""
else
results["data"]["viewer"]["login"].upcase
end
end
end
graphql-remote_loader
allows for querying GraphQL APIs from within resolvers of a graphql-ruby
API.
This can be used to create GraphQL APIs that depend on data from other GraphQL APIs, either remote or local.
A promise-based resolution strategy from Shopify's graphql-batch
is used to batch all requested data into a single GraphQL query. Promises are fulfilled with only the data they requested.
You can think of it as a lightweight version of schema-stitching.
Each Loader#load
invocation does not send a GraphQL query to the remote. The Gem uses graphql-batch to collect all GraphQL queries together, then combines them and sends a single query to the upstream. The gem splits the response JSON up so that each promise is only resolved with data that it asked for.
First, you'll need to install the gem. Either do gem install graphql-remote_loader
or add this to your Gemfile:
gem "graphql-remote_loader"
The gem provides a base loader GraphQL::RemoteLoader::Loader
which does most of the heavy lifting. In order to remain client-agnostic, there's an unimplemented no-op that takes a query string and queries the remote GraphQL API.
To use, create a new class that inherits from GraphQL::RemoteLoader::Loader
and define def query(query_string)
. The method takes a query String as input. The expected output is a response Hash
, or an object that responds to #to_h
.
Example:
require "graphql/remote_loader"
module MyApp
class GitHubLoader < GraphQL::RemoteLoader::Loader
def query(query_string)
parsed_query = GraphQLClient.parse(query_string)
GraphQLClient.query(parsed_query)
end
end
end
This example uses graphql-client
. Any client, or even just plain cURL
/HTTP
can be used.
With your loader setup, you can begin using #load
or #load_value
in your graphql-ruby
resolvers.
To see a working example of how graphql-remote_loader
works, see the complete, working example application.
bundle install
bundle exec rspec
FAQs
Unknown package
We found that graphql-remote_loader demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.