Back to Graphql Ruby

Client Workflow

guides/operation_store/client_workflow.md

2.6.12.8 KB
Original Source

To use persisted queries with your client application, you must:

This documentation also touches on {% internal_link "graphql-ruby-client sync", "/javascript_client/sync" %}, a JavaScript client library for using OperationStore.

Add a Client

Clients are registered via {% internal_link "the dashboard","/operation_store/getting_started#add-routes" %}:

{{ "/operation_store/add_a_client.png" | link_to_img:"Add a Client for Persisted Queries" }}

A default secret is provided for you, but you can also enter your own. The secret is used for {% internal_link "HMAC authentication", "/operation_store/access_control" %}.

(Are you interested in a Ruby API for this? Please {% open_an_issue "OperationStore Ruby API" %} or email [email protected].)

Syncing

Once a client is registered, it can push queries to the server via {% internal_link "the Sync API","/operation_store/getting_started#add-routes" %}.

The easiest way to sync is with graphql-ruby-client sync, a command-line tool written in JavaScript ({% internal_link "Sync Guide", "/javascript_client/sync" %})

In short, it:

  • Finds GraphQL queries from .graphql files or relay-compiler output in the provided --path
  • Adds an {% internal_link "Authentication header","/operation_store/access_control" %} based on the provided --client and --secret
  • Sends the operations to the provided --url
  • Generates a JavaScript module into the provided --outfile

For example:

{{ "/operation_store/sync_example.png" | link_to_img:"OperationStore client sync" }}

For help syncing in another language, you can take inspiration from the JavaScript implementation, {% open_an_issue "Implementing operation sync in another language" %}, or email [email protected].

Client Usage

See the {% internal_link "Sync Guide", "/javascript_client/sync" %} for using OperationStore with Relay Modern, Apollo 1.x, Apollo Link, or plain JavaScript.

To run stored operations from another client, send a param called operationId which is composed of:

ruby
 {
   # ...
   operationId: "my-relay-app/ce79aa2784fc..."
   #            ^ client id  / ^ operation id
 }

The server will use those values to fetch an operation from the database.

Next Steps

Learn more about OperationStore's {% internal_link "authentication", "/operation_store/access_control" %} or read some tips for {% internal_link "server management","/operation_store/server_management" %}.