Releases: rebing/graphql-laravel
8.0.0-rc1 / Breaking Changes incoming!
Due 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 few breaking changes were made for this next major version.
To be clear (see below for details): you will need to adapt your configuration file
Breaking changes
-
Routing has been rewritten and simplified #757 / mfn
- All routing related configuration is now within the top level
route
configuration key - The following configuration options have been removed:
graphql.routes
It's therefore also not possible anymore to register different routes for
queries and mutations within a schema. Each schema gets only one route
(except for the default schema, which is registered for the global prefix
route as well as under its name).
If necessary, this can be emulated with different schemas and multi-level
paths
- The following configuration options have been moved/renamed:
graphql.prefix=>graphql.route.prefixgraphql.controllers=>graphql.route.controller
Further, providing a controller action forqueryormutationis not
supported anymore.graphql.middlware=>graphql.route.middlewaregraphql.route_group_attributes=>graphql.route.group_attributes
- The actual routes defined have changed:
- No more separate routes for the HTTP methods
- 1 route for each schema + 1 route for the group prefix (default schema)
- If GraphiQL is enabled: 1 route graphiql route for each schema + 1 for the
graphiql group prefix (default schema)
- It's now possible to prevent the registering of any routes by making the top
levelroutean empty array or null \Rebing\GraphQL\GraphQL::routeNameTransformerhas been removed- It's not possible to register schemas with a
-in their name
- All routing related configuration is now within the top level
-
Remove the
\Rebing\GraphQL\GraphQLController::$appproperty #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::$inputObjectand\Rebing\GraphQL\Support\Type::$enumObjectproperties #752 / mfn
Instead in your code, extend\Rebing\GraphQL\Support\InputTypeand\Rebing\GraphQL\Support\EnumTypedirectly -
Support for Lumen has been removed
-
Integrate laragraph/utils RequestParser #739 / mfn
The parsing of GraphQL requests is now more strict:- if you send a
GETrequest, the GraphQL query has to be in the query parameters - if you send a
POSTrequest, the GraphQL query needs to be in the body
Mixing of either isn't possible anymore
Further: - batched queries will only work with
POSTrequests
This is due toRequestParserusing\GraphQL\Server\Helper::parseRequestParamswhich includes this check - Drop support for configuration the name of the variable for the variables (
params_key) GraphQLUploadMiddlewarehas been removed (RequestParserincludes this functionality)- Empty GraphQL queries now return a proper validated GraphQL error
- Signature changes In
\Rebing\GraphQL\GraphQLController:- old:
protected function executeQuery(string $schema, array $input): array
new:protected function executeQuery(string $schema, OperationParams $params): array - old:
protected function queryContext(string $query, ?array $params, string $schema)
new:protected function queryContext(string $query, ?array $variables, string $schema) - old:
protected function handleAutomaticPersistQueries(string $schemaName, array $input): string
new:protected function handleAutomaticPersistQueries(string $schemaName, OperationParams $operation): string
- old:
- if you send a
-
In
\Rebing\GraphQL\GraphQLController, renamed all occurrences of$schemato$schemaName
This is to reduce the confusion as the code in some other places uses$schema
for the actual schema itself (either as an object or array form).
This changes the signature on the following methods:- old:
protected function executeQuery(string $schema, OperationParams $params): array
new:protected function executeQuery(string $schemaName, OperationParams $params): array - old:
protected function queryContext(string $query, ?array $variables, string $schema)
new:protected function queryContext(string $query, ?array $variables, string $schemaName)
- old:
-
In
\Rebing\GraphQL\GraphQL, renamed remaining instances of$paramsto$variables
After switching toRequestParser, the support for changing the variable name
what was supposed toparams_keyhas gone and thus the name isn't fitting anymore- old:
public function query(string $query, ?array $params = [], array $opts = []): array
new:public function query(string $query, ?array $variables = [], array $opts = []): array - old:
public function queryAndReturnResult(string $query, ?array $params = [], array $opts = []): ExecutionResult
new:public function queryAndReturnResult(string $query, ?array $variables = [], array $opts = []): ExecutionResult
- old:
-
As part of APQ parsed query support #740 / mfn:
- In
\Rebing\GraphQL\GraphQLController, the following signature changed:- old:
protected function handleAutomaticPersistQueries(string $schemaName, OperationParams $operation): string
new:protected function handleAutomaticPersistQueries(string $schemaName, OperationParams $operation): array
- old:
- In
\Rebing\GraphQL\GraphQL, the following signature changed:- old:
public function query(string $query, ?array $variables = [], array $opts = []): array
new:public function query($query, ?array $variables = [], array $opts = []): array - old:
public function queryAndReturnResult(string $query, ?array $variables = [], array $opts = []): ExecutionResult
new:public function queryAndReturnResult($query, ?array $variables = [], array $opts = []): ExecutionResult
- old:
- In
Added
- Automatic Persisted Queries (APQ) now cache the parsed query #740 / mfn
This avoids having to re-parse the same queries over and over again. - Add ability to detect unused GraphQL variables #660 / mfn
- Laravels
ValidationExceptionis now formatted the same way as aValidationError#748 / mfn
Changed
- Lazy loading types has been enabled by default #758 / mfn
7.2.0
Added
- Allow disabling batched requests #738 / mfn
7.1.0
Added
- Basic Automatic Persisted Queries (APQ) support #701 / illambo
7.0.1
Added
- Support Laravels simple pagination #715 / lamtranb
7.0.0
Breaking changes
- Signature of
\Rebing\GraphQL\Support\Privacy::validatechanged, now it accepts both query/mutation arguments and the query/mutation context.
Update your existing privacy policies this way:-public function validate(array $queryArgs): bool +public function validate(array $queryArgs, $queryContext = null): bool
Added
- Ability to pass query/mutation context to the field privacy handler (both closure and class) #727 / torunar
6.5.0
Fixed
- Middleware and methods can be used in class based schemas. #724 / jasonvarga
This is a follow-up fix for Support for class based schemas
6.4.0
Added
- Support for per-schema types #658 / stevelacey
6.3.0
Added
- Support for class based schemas #706 / jasonvarga
6.2.0
Fixed
- Lumen routing with regular expression constraints #719 / sglitowitzsoci
6.1.0
Added
- Support for resolver middleware #594 / stevelacey