overblog / graphql-subscription
GraphQL native subscription.
Requires
- php: >=7.1
- ext-json: *
- psr/log: ^1.0
- symfony/mercure: >=0.2.0
- webonyx/graphql-php: *
Requires (Dev)
- lcobucci/jwt: ^3.2
- overblog/graphql-bundle: >=0.11
- phpstan/extension-installer: ^1.0
- phpstan/phpstan-phpunit: ^0.11
- phpstan/phpstan-shim: ^0.11.19
- phpstan/phpstan-symfony: ^0.11
- phpunit/phpunit: ^7.2
- symfony/framework-bundle: >=3.4
- symfony/messenger: >=4.0
- symfony/yaml: >=3.4
Suggests
- nelmio/cors-bundle: To manage CORS prefight
This package is auto-updated.
Last update: 2024-10-22 16:22:46 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': ~