⚡️ Pro Feature ⚡️ This feature is bundled with GraphQL-Pro.
To use GraphQL::Pro::OperationStore
with your app, follow these steps:
OperationStore
is supportedOperationStore
’s dataOperationStore
to your GraphQL schemaOperationStore
requires two gems in your application environment:
Rack
: to serve the Dashboard and Sync API. (In Rails, this is provided by config/routes.rb
.)These are bundled with Rails by default.
If you’re going to store data with ActiveRecord, migrate the database to prepare tables for it.
OperationStore
To hook up the storage to your schema, add the plugin:
class MySchema < GraphQL::Schema
# ...
use GraphQL::Pro::OperationStore
end
By default, it uses ActiveRecord
. It also accepts:
redis:
, for using a Redis backend; ORbackend_class:
, for implementing custom persistence.To use OperationStore
, add two routes to your app:
# config/routes.rb
# Include GraphQL::Pro's routing extensions:
using GraphQL::Pro::Routes
Rails.application.routes.draw do
# ...
# Add the Dashboard
# TODO: authorize, see the dashboard guide
mount MySchema.dashboard, at: "/graphql/dashboard"
# Add the Sync API (authorization built-in)
mount MySchema.operation_store_sync, at: "/graphql/sync"
end
MySchema.operation_store_sync
receives pushes from clients. See Client Workflow for more info on how this endpoint is used.
MySchema.dashboard
includes a web view to the OperationStore
, visible at /graphql/dashboard
. See the Dashboard guide for more details, including authorization.
operation_store_sync
and dashboard
are both Rack apps, so you can mount them in Rails, Sinatra, or any other Rack app.
Add operation_id:
to your GraphQL context:
# app/controllers/graphql_controller.rb
context = {
# Relay / Apollo 1.x:
operation_id: params[:operationId]
# Or, Apollo Link:
# operation_id: params[:extensions][:operationId]
}
MySchema.execute(
# ...
context: context,
)
OperationStore
will use operation_id
to fetch the operation from the database.
See Server Management for details about rejecting GraphQL from params[:query]
.
Sync your operations with the Client Workflow.