rebing/graphql-laravel
Code-first GraphQL integration for Laravel based on webonyx/graphql-php. Define schemas, types, queries and mutations in PHP. Supports multiple schemas, per-schema middleware, resolver middleware, and n+1 prevention via dataloaders or SelectFields eager loading.
[!WARNING] Please also read https://github.com/rebing/graphql-laravel/blob/master/UPGRADE.md#upgrading-from-9-to-10
Privacy::validate() and closure signature changed #1251 / mfn
new mixed $root first parameter, new optional ?ResolveInfo $resolveInfo fourth parameter, $queryContext now typed as mixed$getSelectFields parameter from Field::authorize() #1250 / mfn
it has been non-functional since half a decadeSelectFields crashing when field types use callable #1252 / mfnOperationParams not copying originalInput/readOnly, causing TypeError #1254 / mfnconfig() inside config file #1255 / mfnBreaking changes
Privacy::validate()first parameter renamed from$queryArgsto$fieldArgs— it now receives the field's own arguments instead of root query argumentsSelectFieldsnow identifies wrapper types via theRebing\GraphQL\Support\Contracts\WrapTypemarker interface. Custom pagination types and wrap types used withSelectFieldsmust implement this interface. #1228 / mfnAdded
- Add tracing support with OpenTelemetry driver #1220 / mfn
Rebing\GraphQL\Support\Contracts\WrapTypemarker interface for wrapper types (pagination types and custom wrap types) #1228 / mfnFixed
- Narrow
GraphQL::type()PHPStan return type to(NullableType&Type)|NonNullso consumers can pass it toType::nonNull()without static analysis errors #1221 / mfn- Fix
SelectFieldsforcingselect *for Interface return types instead of selecting only the requested columns #683 / mfn- Fix
SelectFieldsnot calling customquerycallbacks on relation fields insideUnionTypemembers #900 / mfn- Fix cross-field validation rules (
prohibits,required_without,required_if, etc.) not working in nested InputTypes #930 / mfn- Fix
privacyattribute ignored on nested/sub-types by moving enforcement fromSelectFieldsto field resolvers inType::getFields()#1161 / mfn- Fix
SelectFieldsproducing emptySELECTclause for custom wrap types created viaGraphQL::wrapType()#1228 / mfn
Breaking changes
- Security hardening: safer defaults for production deployments #1210 / mfn
- Default HTTP method changed from
GET/POSTtoPOSTonly- Batching disabled by default (
batching.default→false)- Introspection disabled by default (
GRAPHQL_DISABLE_INTROSPECTIONenv var)- Default
query_max_depthset to13(was unlimited)- Default
query_max_complexityset to500(was unlimited)- Authorization now runs before validation in field resolver
- Authorization uses strict
=== truecomparisonAdded
- Added `max_batch_size` config option to limit batch query operations
Full Changelog: https://github.com/rebing/graphql-laravel/compare/10.0.0-RC2...10.0.0-RC3
[!WARNING] Please also read https://github.com/rebing/graphql-laravel/blob/master/UPGRADE.md#upgrading-from-9-to-10
Privacy::validate() first parameter renamed from $queryArgs to $fieldArgs — it now receives the field's own arguments instead of root query argumentsSelectFields now identifies wrapper types via the Rebing\GraphQL\Support\Contracts\WrapType marker interface. Custom pagination types and wrap types used with SelectFields must implement this interface. #1228 / mfnRebing\GraphQL\Support\Contracts\WrapType marker interface for wrapper types (pagination types and custom wrap types) #1228 / mfnGraphQL::type() PHPStan return type to (NullableType&Type)|NonNull so consumers can pass it to Type::nonNull() without static analysis errors #1221 / mfnSelectFields forcing select * for Interface return types instead of selecting only the requested columns #683 / mfnSelectFields not calling custom query callbacks on relation fields inside UnionType members #900 / mfnprohibits, required_without, required_if, etc.) not working in nested InputTypes #930 / mfnprivacy attribute ignored on nested/sub-types by moving enforcement from SelectFields to field resolvers in Type::getFields() #1161 / mfnSelectFields producing empty SELECT clause for custom wrap types created via GraphQL::wrapType() #1228 / mfnBreaking changes
- Security hardening: safer defaults for production deployments #1210 / mfn
- Default HTTP method changed from
GET/POSTtoPOSTonly- Batching disabled by default (
batching.default→false)- Introspection disabled by default (
GRAPHQL_DISABLE_INTROSPECTIONenv var)- Default
query_max_depthset to13(was unlimited)- Default
query_max_complexityset to500(was unlimited)- Authorization now runs before validation in field resolver
- Authorization uses strict
=== truecomparisonAdded
- Added `max_batch_size` config option to limit batch query operations
Full Changelog: https://github.com/rebing/graphql-laravel/compare/10.0.0-RC1...10.0.0-RC2
[!WARNING] Please also read https://github.com/rebing/graphql-laravel/blob/master/UPGRADE.md#upgrading-from-9-to-10
This release focuses on hardening the security defaults of this library for production deployments and hence comes with breaking changes:
GET/POST to POST onlybatching.default → false)
max_batch_size config option to limit batch query operationsGRAPHQL_DISABLE_INTROSPECTION env var)query_max_depth set to 13 (was unlimited)query_max_complexity set to 500 (was unlimited)=== true comparisonSee also the upgrade guide from 9 to 10.
For discussion, please use https://github.com/rebing/graphql-laravel/discussions/1211
Full Changelog: https://github.com/rebing/graphql-laravel/compare/9.17.0...10.0.0-RC1
Full Changelog: https://github.com/rebing/graphql-laravel/compare/9.16.0...9.17.0
Full Changelog: https://github.com/rebing/graphql-laravel/compare/9.15.0...9.16.0
Full Changelog: https://github.com/rebing/graphql-laravel/compare/9.14.0...9.15.0
Full Changelog: https://github.com/rebing/graphql-laravel/compare/9.13.0...9.14.0
Full Changelog: https://github.com/rebing/graphql-laravel/compare/9.12.0...9.13.0
Full Changelog: https://github.com/rebing/graphql-laravel/compare/9.11.0...9.12.0
route_attributes support for GraphQL routes by @alissn in https://github.com/rebing/graphql-laravel/pull/1186Full Changelog: https://github.com/rebing/graphql-laravel/compare/9.10.0...9.11.0
Full Changelog: https://github.com/rebing/graphql-laravel/compare/9.9.0...9.10.0
Full Changelog: https://github.com/rebing/graphql-laravel/compare/9.8.0...9.9.0
Full Changelog: https://github.com/rebing/graphql-laravel/compare/9.7.0...9.8.0
Full Changelog: https://github.com/rebing/graphql-laravel/compare/9.6.0...9.7.0
Full Changelog: https://github.com/rebing/graphql-laravel/compare/9.5.0...9.6.0
Full Changelog: https://github.com/rebing/graphql-laravel/compare/9.4.0...9.5.0
Full Changelog: https://github.com/rebing/graphql-laravel/compare/9.3.0...9.4.0
Full Changelog: https://github.com/rebing/graphql-laravel/compare/9.2.0...9.3.0
Full Changelog: https://github.com/rebing/graphql-laravel/compare/9.1.0...9.2.0
Full Changelog: https://github.com/rebing/graphql-laravel/compare/9.0.0...9.1.0
It's been 1 1/2 years since our last major release 8.0.0 😱
The library itself stays true to its roots, but we've to adapt to the evolving ecosystem (remove unsupported PHP and Laravel version) and stay compatible with other dependencies (e.g. graphql-php).
High level:
Upgrade to graphql-php 15 #953 / mfn
This includes possible breaking changes also outside of this package, see also https://github.com/webonyx/graphql-php/releases/tag/v15.0.0
Known breaking changes:
errors.*.<non-standard error key> any more, but have been moved to
errors.*.extensions.<non-standard error key>.errors.*.extensions.category has been removed upstream, but we try to
keep it alive with the interface
\Rebing\GraphQL\Error\ProvidesErrorCategory as it can be a useful
discriminator on the client side in certain cases. But only the cases from
this library are preserved, e.g. categories like request, graphql or
internal are gone.\Rebing\GraphQL\Support\OperationParams has added required types due to
its base class changes:
public function getOriginalInput($key)public function getOriginalInput(string $key)public function isReadOnly()public function isReadOnly(): boolSome BC may happen also if you extended code originating in graphql-php, some examples:
$name or $description\GraphQL\Validator\DocumentValidator in your code
directly, you now need use FQCN to reference them and not the shortened
string names.->getWrappedType(true) was replaced with ->getInnermostType()\GraphQL\Type\Definition\FieldArgument has been renamed to
\GraphQL\Type\Definition\ArgumentPagination and SimplePagination helper types now enforce nonNull on their data types--prefer-lowest #1055 / mfnlaragraph/utils and webonyx/graphql-php
and thus their minimum version had to be slightly bumped to 2.0.1 and
15.0.3 respectively.Many thanks to all the contributors!
Full Changelog: https://github.com/rebing/graphql-laravel/compare/8.6.0...9.0.0
Make sure to read the release notes, which contain breaking changes ❗ , for
Full Changelog: https://github.com/rebing/graphql-laravel/compare/9.0.0-rc2...9.0.0-rc3
First, please make sure to make yourself familiar with the 9.0.0-rc1 release, which contains the core of breaking changes!
Highlights of 9.0.0-rc2:
Pagination and SimplePagination helper types now enforce nonNull on their data types #1033 / mfnFull Changelog: https://github.com/rebing/graphql-laravel/compare/9.0.0-rc1...9.0.0-rc2
That's the good news, the "bad" news is in fact all of the changes bring breaking changes. Some induced due to transitive change updates, others directly due to feature removal / easing of maintenance.
Please carefully read through the changelog!
Upgrade to graphql-php 15 #953 / mfn
This includes possible breaking changes also outside of this package, see also https://github.com/webonyx/graphql-php/releases/tag/v15.0.0
Known breaking changes:
errors.*.<non-standard error key> any more, but have been moved to
errors.*.extensions.<non-standard error key>.errors.*.extensions.category has been removed upstream, but we try to
keep it alive with the interface
\Rebing\GraphQL\Error\ProvidesErrorCategory as it can be a useful
discriminator on the client side in certain cases. But only the cases from
this library are preserved, e.g. categories like request, graphql or
internal are gone.\Rebing\GraphQL\Support\OperationParams has added required types due to
its base class changes:
public function getOriginalInput($key)public function getOriginalInput(string $key)public function isReadOnly()public function isReadOnly(): boolSome BC may happen also if you extended code originating in graphql-php, some examples:
$name or $description\GraphQL\Validator\DocumentValidator in your code
directly, you now need use FQCN to reference them and not the shortened
string names.->getWrappedType(true) was replaced with ->getInnermostType()\GraphQL\Type\Definition\FieldArgument has been renamed to
\GraphQL\Type\Definition\ArgumentFull Changelog: https://github.com/rebing/graphql-laravel/compare/8.6.0...9.0.0-rc1
Full Changelog: https://github.com/rebing/graphql-laravel/compare/8.5.0...8.6.0
Full Changelog: https://github.com/rebing/graphql-laravel/compare/8.4.0...8.5.0
Full Changelog: https://github.com/rebing/graphql-laravel/compare/8.3.0...8.4.0
controller param in config #906 / viktorruskaiFull Changelog: https://github.com/rebing/graphql-laravel/compare/8.2.1...8.3.0
After quite some RC cycles, the next major release finally arrived!
Note: this new release contains a LOT of BREAKING CHANGES, please make sure to review the change changelog and test before you deploy!
High level changes:
Please find all the details below:
Rewrite and simplify how schemas are handled
\Rebing\GraphQL\GraphQL::$schemas now only holds Schemas and not a
mixture of strings or arrays\Rebing\GraphQL\GraphQL::schema() now only accepts a "schema name", but no
ad hoc Schema or "schema configs". To use ad hoc schemas, use
\Rebing\GraphQL\GraphQL::buildSchemaFromConfig() and
\Rebing\GraphQL\GraphQL::addSchema()\Rebing\GraphQL\GraphQL::queryAndReturnResult() (and thus also
\Rebing\GraphQL\GraphQL::query()) does not accept ad hoc schemas via
$opts['schema'] anymore; it now only can reference a schema via its name.\Rebing\GraphQL\GraphQL::addSchema() now only accept Schema objects,
where before it would support ad hoc schemas via array configuration.
Use \Rebing\GraphQL\GraphQL::buildSchemaFromConfig() for that now.\Rebing\GraphQL\GraphQL::getSchemaConfiguration() has been removed due to
the simplifications.\Rebing\GraphQL\GraphQL::getNormalizedSchemaConfiguration() does not
support ad hoc schemas anymore and only accepts the schema name.\Rebing\GraphQL\GraphQLServiceProvider::bootSchemas() has been removed due
to the simplifications.The following methods now take a \Illuminate\Contracts\Config\Repository as
second argument:
\Rebing\GraphQL\GraphQL::__construct\Rebing\GraphQL\GraphQLServiceProvider::applySecurityRulesAs part of moving the architecture to an execution based middleware approach, the following methods have been removed:
\Rebing\GraphQL\GraphQLController::handleAutomaticPersistQueries has been
replaced by the AutomaticPersistedQueriesMiddleware middleware\Rebing\GraphQL\GraphQLController::queryContext has been
replaced by the AddAuthUserContextValueMiddleware middlewarequeryContext to inject a custom context, you
now need to create your own execution middleware and add to your
configuration\Rebing\GraphQL\GraphQLController::executeQuery has become obsolete, no
direct replacement.Routing has been rewritten and simplified #757 / mfn
route
configuration keygraphql.routesgraphql.prefix => graphql.route.prefixgraphql.controllers => graphql.route.controllerquery or mutation is not
supported anymore.graphql.middleware => graphql.route.middlewaregraphql.route_group_attributes => graphql.route.group_attributes'method' argument must provide the HTTP method
verbs in uppercase like POST or GET, post or get will not work.route an empty array or null\Rebing\GraphQL\GraphQL::routeNameTransformer has been removed- in their nameRemove the \Rebing\GraphQL\GraphQLController::$app property #755 / mfn
Injecting the application container early is incompatible when running within
an application server like laravel/octane, as it's not guaranteed that the
container received contains all the bindings. If you relied on this property
when extending the classes, invoke the container directly via
Container::getInstance().
Remove deprecated \Rebing\GraphQL\Support\Type::$inputObject and \Rebing\GraphQL\Support\Type::$enumObject properties #752 / mfn
Instead in your code, extend \Rebing\GraphQL\Support\InputType and \Rebing\GraphQL\Support\EnumType directly
Support for Lumen has been removed
Integrate laragraph/utils RequestParser #739 / mfn
The parsing of GraphQL requests is now more strict:
GET request, the GraphQL query has to be in the query parametersPOST request, the GraphQL query needs to be in the bodyPOST requests
This is due to RequestParser using \GraphQL\Server\Helper::parseRequestParams which includes this check
Further:params_key)GraphQLUploadMiddleware has been removed (RequestParser includes this functionality)In \Rebing\GraphQL\GraphQL, renamed remaining instances of $params to $variables
After switching to RequestParser, the support for changing the variable name
what was supposed to params_key has gone and thus the name isn't fitting anymore.
Also, the default value for $variables has been changed to null to better
fit the how OperationParams works:
old: public function query(string $query, ?array $params = [], array $opts = []): array
new: public function query(string $query, ?array $variables = null, array $opts = []): array
old: public function queryAndReturnResult(string $query, ?array $params = [], array $opts = []): ExecutionResult
new: public function queryAndReturnResult(string $query, ?array $variables = null, array $opts = []): ExecutionResult
\Rebing\GraphQL\Support\ResolveInfoFieldsAndArguments has been removed
$getSelectFields closure no longer takes a depth parameter
The $args argument, of the handle method of the execution middlewares requires array as type.
'graphql' as alias #768 / mfnValidationException is now formatted the same way as a ValidationError #748 / mfnconfig() function and preferable use the repository or the Facade otherwise #774 / mfn$args argument, of the handle method of the execution middlewares requires array as type #843 / sforwardTypeNotFound when an interface defined after another type where it is used #828 / kasian-sergeev\Rebing\GraphQL\GraphQLServiceProvider::provides was removed #769 / mfnRewrite and simplify how schemas are handled
\Rebing\GraphQL\GraphQL::$schemas now only holds Schemas and not a
mixture of strings or arrays\Rebing\GraphQL\GraphQL::schema() now only accepts a "schema name", but no
ad hoc Schema or "schema configs". To use ad hoc schemas, use
\Rebing\GraphQL\GraphQL::buildSchemaFromConfig() and
\Rebing\GraphQL\GraphQL::addSchema()\Rebing\GraphQL\GraphQL::queryAndReturnResult() (and thus also
\Rebing\GraphQL\GraphQL::query()) does not accept ad hoc schemas via
$opts['schema'] anymore; it now only can reference a schema via its name.\Rebing\GraphQL\GraphQL::addSchema() now only accept Schema objects,
where before it would support ad hoc schemas via array configuration.
Use \Rebing\GraphQL\GraphQL::buildSchemaFromConfig() for that now.\Rebing\GraphQL\GraphQL::getSchemaConfiguration() has been removed due to
the simplifications.\Rebing\GraphQL\GraphQL::getNormalizedSchemaConfiguration() does not
support ad hoc schemas anymore and only accepts the schema name.\Rebing\GraphQL\GraphQLServiceProvider::bootSchemas() has been removed due
to the simplifications.The following methods now take a \Illuminate\Contracts\Config\Repository as
second argument:
\Rebing\GraphQL\GraphQL::__construct\Rebing\GraphQL\GraphQLServiceProvider::applySecurityRulesAs part of moving the architecture to an execution based middleware approach, the following methods have been removed:
\Rebing\GraphQL\GraphQLController::handleAutomaticPersistQueries has been
replaced by the AutomaticPersistedQueriesMiddleware middleware\Rebing\GraphQL\GraphQLController::queryContext has been
replaced by the AddAuthUserContextValueMiddleware middlewarequeryContext to inject a custom context, you
now need to create your own execution middleware and add to your
configuration\Rebing\GraphQL\GraphQLController::executeQuery has become obsolete, no
direct replacement.Routing has been rewritten and simplified #757 / mfn
route
configuration keygraphql.routesgraphql.prefix => graphql.route.prefixgraphql.controllers => graphql.route.controllerquery or mutation is not
supported anymore.graphql.middleware => graphql.route.middlewaregraphql.route_group_attributes => graphql.route.group_attributes'method' argument must provide the HTTP method
verbs in uppercase like POST or GET, post or get will not work.route an empty array or null\Rebing\GraphQL\GraphQL::routeNameTransformer has been removed- in their nameRemove the \Rebing\GraphQL\GraphQLController::$app property #755 / mfn
Injecting the application container early is incompatible when running within
an application server like laravel/octane, as it's not guaranteed that the
container received contains all the bindings. If you relied on this property
when extending the classes, invoke the container directly via
Container::getInstance().
Remove deprecated \Rebing\GraphQL\Support\Type::$inputObject and \Rebing\GraphQL\Support\Type::$enumObject properties #752 / mfn
Instead in your code, extend \Rebing\GraphQL\Support\InputType and \Rebing\GraphQL\Support\EnumType directly
Support for Lumen has been removed
Integrate laragraph/utils RequestParser #739 / mfn
The parsing of GraphQL requests is now more strict:
GET request, the GraphQL query has to be in the query parametersPOST request, the GraphQL query needs to be in the bodyPOST requests
This is due to RequestParser using \GraphQL\Server\Helper::parseRequestParams which includes this check
Further:params_key)GraphQLUploadMiddleware has been removed (RequestParser includes this functionality)In \Rebing\GraphQL\GraphQL, renamed remaining instances of $params to $variables
After switching to RequestParser, the support for changing the variable name
what was supposed to params_key has gone and thus the name isn't fitting anymore.
Also, the default value for $variables has been changed to null to better
fit the how OperationParams works:
old: public function query(string $query, ?array $params = [], array $opts = []): array
new: public function query(string $query, ?array $variables = null, array $opts = []): array
old: public function queryAndReturnResult(string $query, ?array $params = [], array $opts = []): ExecutionResult
new: public function queryAndReturnResult(string $query, ?array $variables = null, array $opts = []): ExecutionResult
\Rebing\GraphQL\Support\ResolveInfoFieldsAndArguments has been removed
$getSelectFields closure no longer takes a depth parameter
The $args argument, of the handle method of the execution middlewares requires array as type.
'graphql' as alias #768 / mfnValidationException is now formatted the same way as a ValidationError #748 / mfnconfig() function and preferable use the repository or the Facade otherwise #774 / mfn$args argument, of the handle method of the execution middlewares requires array as type #843 / sforwardTypeNotFound when an interface defined after another type where it is used #828 / kasian-sergeev\Rebing\GraphQL\GraphQLServiceProvider::provides was removed #769 / mfn$args argument, of the handle method of the execution middlewares requires array as type #843 / sforwardTypeNotFound when an interface defined after another type where it is used #828 / kasian-sergeevRewrite and simplify how schemas are handled
\Rebing\GraphQL\GraphQL::$schemas now only holds Schemas and not a
mixture of strings or arrays\Rebing\GraphQL\GraphQL::schema() now only accepts a "schema name", but no
ad hoc Schema or "schema configs". To use ad hoc schemas, use
\Rebing\GraphQL\GraphQL::buildSchemaFromConfig() and
\Rebing\GraphQL\GraphQL::addSchema()\Rebing\GraphQL\GraphQL::queryAndReturnResult() (and thus also
\Rebing\GraphQL\GraphQL::query()) does not accept ad hoc schemas via
$opts['schema'] anymore; it now only can reference a schema via its name.\Rebing\GraphQL\GraphQL::addSchema() now only accept Schema objects,
where before it would support ad hoc schemas via array configuration.
Use \Rebing\GraphQL\GraphQL::buildSchemaFromConfig() for that now.\Rebing\GraphQL\GraphQL::getSchemaConfiguration() has been removed due to
the simplifications.\Rebing\GraphQL\GraphQL::getNormalizedSchemaConfiguration() does not
support ad hoc schemas anymore and only accepts the schema name.\Rebing\GraphQL\GraphQLServiceProvider::bootSchemas() has been removed due
to the simplifications.The following methods now take a \Illuminate\Contracts\Config\Repository as
second argument:
\Rebing\GraphQL\GraphQL::__construct\Rebing\GraphQL\GraphQLServiceProvider::applySecurityRulesAs part of moving the architecture to an execution based middleware approach, the following methods have been removed:
\Rebing\GraphQL\GraphQLController::handleAutomaticPersistQueries has been
replaced by the AutomaticPersistedQueriesMiddleware middleware\Rebing\GraphQL\GraphQLController::queryContext has been
replaced by the AddAuthUserContextValueMiddleware middlewarequeryContext to inject a custom context, you
now need to create your own execution middleware and add to your
configuration\Rebing\GraphQL\GraphQLController::executeQuery has become obsolete, no
direct replacement.Routing has been rewritten and simplified #757 / mfn
route
configuration keygraphql.routesgraphql.prefix => graphql.route.prefixgraphql.controllers => graphql.route.controllerquery or mutation is not
supported anymore.graphql.middleware => graphql.route.middlewaregraphql.route_group_attributes => graphql.route.group_attributes'method' argument must provide the HTTP method
verbs in uppercase like POST or GET, post or get will not work.route an empty array or null\Rebing\GraphQL\GraphQL::routeNameTransformer has been removed- in their nameRemove the \Rebing\GraphQL\GraphQLController::$app property #755 / mfn
Injecting the application container early is incompatible when running within
an application server like laravel/octane, as it's not guaranteed that the
container received contains all the bindings. If you relied on this property
when extending the classes, invoke the container directly via
Container::getInstance().
Remove deprecated \Rebing\GraphQL\Support\Type::$inputObject and \Rebing\GraphQL\Support\Type::$enumObject properties #752 / mfn
Instead in your code, extend \Rebing\GraphQL\Support\InputType and \Rebing\GraphQL\Support\EnumType directly
Support for Lumen has been removed
Integrate laragraph/utils RequestParser #739 / mfn
The parsing of GraphQL requests is now more strict:
GET request, the GraphQL query has to be in the query parametersPOST request, the GraphQL query needs to be in the bodyPOST requests
This is due to RequestParser using \GraphQL\Server\Helper::parseRequestParams which includes this check
Further:params_key)GraphQLUploadMiddleware has been removed (RequestParser includes this functionality)In \Rebing\GraphQL\GraphQL, renamed remaining instances of $params to $variables
After switching to RequestParser, the support for changing the variable name
what was supposed to params_key has gone and thus the name isn't fitting anymore.
Also, the default value for $variables has been changed to null to better
fit the how OperationParams works:
old: public function query(string $query, ?array $params = [], array $opts = []): array
new: public function query(string $query, ?array $variables = null, array $opts = []): array
old: public function queryAndReturnResult(string $query, ?array $params = [], array $opts = []): ExecutionResult
new: public function queryAndReturnResult(string $query, ?array $variables = null, array $opts = []): ExecutionResult
\Rebing\GraphQL\Support\ResolveInfoFieldsAndArguments has been removed
$getSelectFields closure no longer takes a depth parameter
The $args argument, of the handle method of the execution middlewares requires array as type.
'graphql' as alias #768 / mfnValidationException is now formatted the same way as a ValidationError #748 / mfnconfig() function and preferable use the repository or the Facade otherwise #774 / mfn$args argument, of the handle method of the execution middlewares requires array as type #843 / sforwardTypeNotFound when an interface defined after another type where it is used #828 / kasian-sergeev\Rebing\GraphQL\GraphQLServiceProvider::provides was removed #769 / mfnmethod on the schema has been brought back!
Unfortunately with a twist: HTTP methods provided must be all UPPERCASE
This is basically no change for the 7 -> 8 transition, but it was removed inthe initial rewrite of the routing and now brought back. Main reason is the ability to disable GraphQL for GET requests, if not desired (i.e. to prevent CSRF attacks)\Rebing\GraphQL\Support\ResolveInfoFieldsAndArguments has been removed$getSelectFields closure no longer takes a depth parameterRewrite and simplify how schemas are handled
\Rebing\GraphQL\GraphQL::$schemas now only holds Schemas and not a
mixture of strings or arrays\Rebing\GraphQL\GraphQL::schema() now only accepts a "schema name", but no
ad hoc Schema or "schema configs". To use ad hoc schemas, use
\Rebing\GraphQL\GraphQL::buildSchemaFromConfig() and
\Rebing\GraphQL\GraphQL::addSchema()\Rebing\GraphQL\GraphQL::queryAndReturnResult() (and thus also
\Rebing\GraphQL\GraphQL::query()) does not accept ad hoc schemas via
$opts['schema'] anymore; it now only can reference a schema via its name.\Rebing\GraphQL\GraphQL::addSchema() now only accept Schema objects,
where before it would support ad hoc schemas via array configuration.
Use \Rebing\GraphQL\GraphQL::buildSchemaFromConfig() for that now.\Rebing\GraphQL\GraphQL::getSchemaConfiguration() has been removed due to
the simplifications.\Rebing\GraphQL\GraphQL::getNormalizedSchemaConfiguration() does not
support ad hoc schemas anymore and only accepts the schema name.\Rebing\GraphQL\GraphQLServiceProvider::bootSchemas() has been removed due
to the simplifications.The following methods now take a \Illuminate\Contracts\Config\Repository as
second argument:
\Rebing\GraphQL\GraphQL::__construct\Rebing\GraphQL\GraphQLServiceProvider::applySecurityRulesAs part of moving the architecture to an execution based middleware approach, the following methods have been removed:
\Rebing\GraphQL\GraphQLController::handleAutomaticPersistQueries has been
replaced by the AutomaticPersistedQueriesMiddleware middleware\Rebing\GraphQL\GraphQLController::queryContext has been
replaced by the AddAuthUserContextValueMiddleware middlewarequeryContext to inject a custom context, you
now need to create your own execution middleware and add to your
configuration\Rebing\GraphQL\GraphQLController::executeQuery has become obsolete, no
direct replacement.Routing has been rewritten and simplified #757 / mfn
route
configuration keygraphql.routesgraphql.prefix => graphql.route.prefixgraphql.controllers => graphql.route.controllerquery or mutation is not
supported anymore.graphql.middlware => graphql.route.middlewaregraphql.route_group_attributes => graphql.route.group_attributesroute an empty array or null\Rebing\GraphQL\GraphQL::routeNameTransformer has been removed- in their nameRemove the \Rebing\GraphQL\GraphQLController::$app property #755 / mfn
Injecting the application container early is incompatible when running within
an application server like laravel/octane, as it's not guaranteed that the
container received contains all the bindings. If you relied on this property
when extending the classes, invoke the container directly via
Container::getInstance().
Remove deprecated \Rebing\GraphQL\Support\Type::$inputObject and \Rebing\GraphQL\Support\Type::$enumObject properties #752 / mfn
Instead in your code, extend \Rebing\GraphQL\Support\InputType and \Rebing\GraphQL\Support\EnumType directly
Support for Lumen has been removed
Integrate laragraph/utils RequestParser #739 / mfn
The parsing of GraphQL requests is now more strict:
GET request, the GraphQL query has to be in the query parametersPOST request, the GraphQL query needs to be in the bodyPOST requests
This is due to RequestParser using \GraphQL\Server\Helper::parseRequestParams which includes this check
Further:params_key)GraphQLUploadMiddleware has been removed (RequestParser includes this functionality)In \Rebing\GraphQL\GraphQL, renamed remaining instances of $params to $variables
After switching to RequestParser, the support for changing the variable name
what was supposed to params_key has gone and thus the name isn't fitting anymore.
Also, the default value for $variables has been changed to null to better
fit the how OperationParams works:
old: public function query(string $query, ?array $params = [], array $opts = []): array
new: public function query(string $query, ?array $variables = null, array $opts = []): array
old: public function queryAndReturnResult(string $query, ?array $params = [], array $opts = []): ExecutionResult
new: public function queryAndReturnResult(string $query, ?array $variables = null, array $opts = []): ExecutionResult
\Rebing\GraphQL\Support\ResolveInfoFieldsAndArguments has been removed
$getSelectFields closure no longer takes a depth parameter
'graphql' as alias #768 / mfnValidationException is now formatted the same way as a ValidationError #748 / mfnconfig() function and preferable use the repository or the Facade otherwise #774 / mfn\Rebing\GraphQL\GraphQLServiceProvider::provides was removed #769 / mfnDue to some longer standing cleanups and embracing of a more standardized approach how to process the GraphQL request using https://github.com/laragraph/utils , a breaking changes were made for this next major version.
Note: compared to 8.0.0-rc2 , the schema handling as been changed!
To be clear (see below for details): you will need to adapt your configuration file
Rewrite and simplify how schemas are handled
\Rebing\GraphQL\GraphQL::$schemas now only holds Schemas and not a
mixture of strings or arrays\Rebing\GraphQL\GraphQL::schema() now only accepts a "schema name", but no
ad hoc Schema or "schema configs". To use ad hoc schemas, use
\Rebing\GraphQL\GraphQL::buildSchemaFromConfig() and
\Rebing\GraphQL\GraphQL::addSchema()\Rebing\GraphQL\GraphQL::queryAndReturnResult() (and thus also
\Rebing\GraphQL\GraphQL::query()) does not accept ad hoc schemas via
$opts['schema'] anymore; it now only can reference a schema via its name.\Rebing\GraphQL\GraphQL::addSchema() now only accept Schema objects,
where before it would support ad hoc schemas via array configuration.
Use \Rebing\GraphQL\GraphQL::buildSchemaFromConfig() for that now.\Rebing\GraphQL\GraphQL::getSchemaConfiguration() has been removed due to
the simplifications.\Rebing\GraphQL\GraphQL::getNormalizedSchemaConfiguration() does not
support ad hoc schemas anymore and only accepts the schema name.\Rebing\GraphQL\GraphQLServiceProvider::bootSchemas() has been removed due
to the simplifications.The following methods now take a \Illuminate\Contracts\Config\Repository as
second argument:
\Rebing\GraphQL\GraphQL::__construct\Rebing\GraphQL\GraphQLServiceProvider::applySecurityRulesAs part of moving the architecture to an execution based middleware approach, the following methods have been removed:
\Rebing\GraphQL\GraphQLController::handleAutomaticPersistQueries has been
replaced by the AutomaticPersistedQueriesMiddleware middleware\Rebing\GraphQL\GraphQLController::queryContext has been
replaced by the AddAuthUserContextValueMiddleware middlewarequeryContext to inject a custom context, you
now need to create your own execution middleware and add to your
configuration\Rebing\GraphQL\GraphQLController::executeQuery has become obsolete, no
direct replacement.Routing has been rewritten and simplified #757 / mfn
route
configuration keygraphql.routesgraphql.prefix => graphql.route.prefixgraphql.controllers => graphql.route.controllerquery or mutation is not
supported anymore.graphql.middlware => graphql.route.middlewaregraphql.route_group_attributes => graphql.route.group_attributesmethod (aka HTTP method)
is not supported anymoreroute an empty array or null\Rebing\GraphQL\GraphQL::routeNameTransformer has been removed- in their nameRemove the \Rebing\GraphQL\GraphQLController::$app property #755 / mfn
Injecting the application container early is incompatible when running within
an application server like laravel/octane, as it's not guaranteed that the
container received contains all the bindings. If you relied on this property
when extending the classes, invoke the container directly via
Container::getInstance().
Remove deprecated \Rebing\GraphQL\Support\Type::$inputObject and \Rebing\GraphQL\Support\Type::$enumObject properties #752 / mfn
Instead in your code, extend \Rebing\GraphQL\Support\InputType and \Rebing\GraphQL\Support\EnumType directly
Support for Lumen has been removed
Integrate laragraph/utils RequestParser #739 / mfn
The parsing of GraphQL requests is now more strict:
GET request, the GraphQL query has to be in the query parametersPOST request, the GraphQL query needs to be in the bodyPOST requests
This is due to RequestParser using \GraphQL\Server\Helper::parseRequestParams which includes this check
Further:params_key)GraphQLUploadMiddleware has been removed (RequestParser includes this functionality)In \Rebing\GraphQL\GraphQL, renamed remaining instances of $params to $variables
After switching to RequestParser, the support for changing the variable name
what was supposed to params_key has gone and thus the name isn't fitting anymore.
Also, the default value for $variables has been changed to null to better
fit the how OperationParams works:
public function query(string $query, ?array $params = [], array $opts = []): array
new: public function query(string $query, ?array $variables = null, array $opts = []): arraypublic function queryAndReturnResult(string $query, ?array $params = [], array $opts = []): ExecutionResult
new: public function queryAndReturnResult(string $query, ?array $variables = null, array $opts = []): ExecutionResult'graphql' as alias #768 / mfnValidationException is now formatted the same way as a ValidationError #748 / mfnconfig() function and preferable use the repository or the Facade otherwise #774 / mfn\Rebing\GraphQL\GraphQLServiceProvider::provides was removed #769 / mfnHow can I help you explore Laravel packages today?