Note in UPGRADE.md about new base class of GraphQL\Error\UserError

This commit is contained in:
Vladimir Razuvaev 2017-07-19 15:52:00 +07:00
parent 38922dbbed
commit 90088c7bde

View File

@ -1,7 +1,7 @@
# Upgrade # Upgrade
## Upgrade v0.9.x > v0.10.x ## Upgrade v0.9.x > v0.10.x
#### Breaking: default error formatting ### Breaking: default error formatting
By default exceptions thrown in resolvers will be reported with generic message `"Internal server error"`. By default exceptions thrown in resolvers will be reported with generic message `"Internal server error"`.
Only exceptions implementing interface `GraphQL\Error\ClientAware` and claiming themselves as `safe` will Only exceptions implementing interface `GraphQL\Error\ClientAware` and claiming themselves as `safe` will
be reported with full error message. be reported with full error message.
@ -26,10 +26,22 @@ GraphQL\Error\FormattedError::setInternalErrorMessage("Unexpected error");
**This change only affects default error reporting mechanism. If you set your own error formatter using **This change only affects default error reporting mechanism. If you set your own error formatter using
`ExecutionResult::setErrorFormatter()` you won't be affected by this change.** `ExecutionResult::setErrorFormatter()` you won't be affected by this change.**
If you are not happy with this change just set [your own error If default formatting doesn't work for you - just set [your own error
formatter](http://webonyx.github.io/graphql-php/error-handling/#custom-error-formatting). formatter](http://webonyx.github.io/graphql-php/error-handling/#custom-error-formatting).
#### Deprecated: GraphQL\Utils moved to GraphQL\Utils\Utils ### Breaking: `GraphQL\Error\UserError` base class
`GraphQL\Error\UserError` now extends `\RuntimeException` (previously it was extending
`GraphQL\Error\InvariantViolation`).
**This may affect authors of derived libraries and those using custom error formatting.**
If you were catching `InvariantViolation` anywhere in your code, you should also catch `UserError` now.
Same applies to `instanceof` checks.
`UserError` is thrown when library detects invalid input from client.
### Deprecated: `GraphQL\Utils` moved to `GraphQL\Utils\Utils`
Old class still exists, but triggers deprecation warning when referenced. Old class still exists, but triggers deprecation warning when referenced.
## Upgrade v0.7.x > v0.8.x ## Upgrade v0.7.x > v0.8.x
@ -37,7 +49,7 @@ All of those changes apply to those who extends various parts of this library.
If you only use the library and don't try to extend it - everything should work without breaks. If you only use the library and don't try to extend it - everything should work without breaks.
#### Breaking: Custom directives handling ### Breaking: Custom directives handling
When passing custom directives to schema, default directives (like `@skip` and `@include`) When passing custom directives to schema, default directives (like `@skip` and `@include`)
are not added to schema automatically anymore. If you need them - add them explicitly with are not added to schema automatically anymore. If you need them - add them explicitly with
your other directives. your other directives.
@ -58,15 +70,15 @@ $schema = new Schema([
]); ]);
``` ```
#### Breaking: Schema protected property and methods visibility ### Breaking: Schema protected property and methods visibility
Most of the `protected` properties and methods of `GraphQL\Schema` were changed to `private`. Most of the `protected` properties and methods of `GraphQL\Schema` were changed to `private`.
Please use public interface instead. Please use public interface instead.
#### Breaking: Node kind constants ### Breaking: Node kind constants
Node kind constants were extracted from `GraphQL\Language\AST\Node` to Node kind constants were extracted from `GraphQL\Language\AST\Node` to
separate class `GraphQL\Language\AST\NodeKind` separate class `GraphQL\Language\AST\NodeKind`
#### Non-breaking: AST node classes renamed ### Non-breaking: AST node classes renamed
AST node classes were renamed to disambiguate with types. e.g.: AST node classes were renamed to disambiguate with types. e.g.:
``` ```
@ -78,7 +90,7 @@ etc.
Old names are still available via `class_alias` defined in `src/deprecated.php`. Old names are still available via `class_alias` defined in `src/deprecated.php`.
This file is included automatically when using composer autoloading. This file is included automatically when using composer autoloading.
#### Deprecations ### Deprecations
There are several deprecations which still work, but trigger `E_USER_DEPRECATED` when used. There are several deprecations which still work, but trigger `E_USER_DEPRECATED` when used.
For example `GraphQL\Executor\Executor::setDefaultResolveFn()` is renamed to `setDefaultResolver()` For example `GraphQL\Executor\Executor::setDefaultResolveFn()` is renamed to `setDefaultResolver()`
@ -89,7 +101,7 @@ but still works with old name.
There are a few new breaking changes in v0.7.0 that were added to the graphql-js reference implementation There are a few new breaking changes in v0.7.0 that were added to the graphql-js reference implementation
with the spec of April2016 with the spec of April2016
#### 1. Context for resolver ### 1. Context for resolver
You can now pass a custom context to the `GraphQL::execute` function that is available in all resolvers as 3rd argument. You can now pass a custom context to the `GraphQL::execute` function that is available in all resolvers as 3rd argument.
This can for example be used to pass the current user etc. This can for example be used to pass the current user etc.
@ -147,7 +159,7 @@ function resolveMyField($object, array $args, $context, ResolveInfo $info){
} }
``` ```
#### 2. Schema constructor signature ### 2. Schema constructor signature
The signature of the Schema constructor now accepts an associative config array instead of positional arguments: The signature of the Schema constructor now accepts an associative config array instead of positional arguments:
@ -165,7 +177,7 @@ $schema = new Schema([
]); ]);
``` ```
#### 3. Types can be directly passed to schema ### 3. Types can be directly passed to schema
There are edge cases when GraphQL cannot infer some types from your schema. There are edge cases when GraphQL cannot infer some types from your schema.
One example is when you define a field of interface type and object types implementing One example is when you define a field of interface type and object types implementing