Partially Successful
GraphQL allows for the response to have a data
and errors
key. If you
have a situation where you can recover from an error during GraphQL execution,
you may catch the Exception instead of letting it bubble all the way up and pass
it to the \OxidEsales\GraphQL\Base\Framework\GraphQLQueryHandler::addError()
static method.
Important
Keep in mind, that the response in the data
key still has to be valid
against your schema.
All exceptions given to the addError()
static method will be delivered to
the consumer of the API in the errors
key.
Use case
Imaging you query a list of products with the following query, the ean
field
is defined as String!
but the ean
field resolver returns null
. This
will throw an Exception
that you may catch in the products
resolver,
replace the product
in this case with null
in the list and add an error
response by forwarding the Exception
to the
\OxidEsales\GraphQL\Base\Framework\GraphQLQueryHandler::addError()
method.
If you do not catch this Exception
in the products resolver, the consumer of
your API will only get an error response without any data.
Request:
query {
products (
title
ean
)
}
Response:
{
"errors": [
{
"message": "EAN for product 1234 could not be fetched",
}
],
"data": {
"products": [
{
"title": "Article 1",
"ean": "some-ean"
},
null
]
}
}