overblog/graphql-subscription

GraphQL native subscription.

Maintainers

👁 Overblog

Package info

github.com/overblog/graphql-subscription

pkg:composer/overblog/graphql-subscription

Statistics

Installs: 234

Dependents: 0

Suggesters: 0

Stars: 15

Open Issues: 1

dev-master 2020-05-12 18:01 UTC

Requires

Suggests

Provides

None

Conflicts

None

Replaces

None

MIT f7963c0bd3bd124cbf38822f54ff96d18c35db40

subscriptiongraphqlmercure

This package is auto-updated.

Last update: 2026-06-22 20:01:32 UTC


README

This library allow using GraphQL subscription over Mercure protocol with any implementation of GraphQL PHP. It Comes out-of-the-box with a Symfony Bridge so it can be easily combine with OverblogGraphQLBundle or API Platform or other Symfony implementation based on GraphQL PHP.

Installation

composer req overblog/graphql-subscription

Default builder executor

<?php
use GraphQL\Executor\ExecutionResult;
use GraphQL\GraphQL;

function (
 $schema,
 $source,
 $rootValue = null,
 $context = null,
 $variableValues = null,
 ?string $operationName = null
): ExecutionResult {
 return GraphQL::executeQuery(...func_get_args());
}

CORS preflight headers

This library does not handle natively CORS preflight headers.

Symfony

Installation without flex

Add the OverblogGraphQLSubscriptionBundle to your application's kernel:

 public function registerBundles()
 {
 $bundles = [
 // ...
 new Overblog\GraphQLSubscription\Bridge\Symfony\OverblogGraphQLSubscriptionBundle(),
 // ...
 ];
 // ...
 }

Configuration

Symfony Flex generates:

  • default configuration in config/packages/graphql_subscription.yaml.

    overblog_graphql_subscription:
     topic_url_pattern: "http://localhost:8000/subscriptions/{channel}/{id}.json"
     mercure_hub:
    # Will use the mercure bundle default publisher
     handler_id: ~
    # Uncomment to use without mercure bundle
    # url: "https://mercure.roks/hub"
    # publish:
    # secret_key: "!mySuperPublisherSecretKey!"
    # Uncomment to expose public hubUrl on start in payload
    # public_url: "https://mercure.roks/hub"
     subscribe:
     secret_key: "!mySuperSubscriberSecretKey!"
    # Uncomment to modify storage filesystem default path
    # storage:
    # path: "%kernel.project_dir%/var/graphql-subscriber"
    # The graphql query handler
    # for OverblogGraphQLBundle: "Overblog\\GraphQLBundle\\Request\\Executor::execute"
    # for API-Plateform: "api_platform.graphql.executor::executeQuery"
     graphql_executor: ~
     schema_builder: ~
  • default routes in config/routes/graphql_subscription.yaml

    overblog_graphql_subscription_endpoint:
     resource: "@OverblogGraphQLSubscriptionBundle/Resources/config/routing/single.yaml"
     prefix: /subscriptions
    # Only for Symfony >= 4.2
    # trailing_slash_on_root: false
    
    # Uncomment to enabled multiple schema
    #overblog_graphql_subscription_multiple_endpoint:
    # resource: "@OverblogGraphQLSubscriptionBundle/Resources/config/routing/multiple.yaml"
    # prefix: /subscriptions

Handling CORS preflight headers

NelmioCorsBundle is recommended to manage CORS preflight, follow instructions to install it.

Here a configuration assuming that subscription endpoint is /subscriptions:

nelmio_cors:
 defaults:
 origin_regex: true
 allow_origin: ['%env(CORS_ALLOW_ORIGIN)%']
 allow_methods: ['GET', 'OPTIONS', 'POST']
 allow_headers: ['Content-Type']
 max_age: 3600
 paths:
 '^/subscriptions': ~