#graphql
#graphql
Вопрос:
Graphql всегда возвращает:
{
"data": {},
"errors": []
}
Возможно ли также вернуть пользовательское сообщение?
{
"data": {},
"errors": [],
"messages": [] // or with another key
}
Если нет, будут ли такие инструменты, как GraphiQL или другие библиотеки, терпеть неудачу, если мы добавим это как пользовательскую функцию?
Ответ №1:
В спецификации указано, что ответом GraphQL должна быть карта с data
ключом, а также error
ключ, если были обнаружены какие-либо ошибки. Однако он также предоставляет необязательный третий ключ — extensions
:
Карта ответов также может содержать запись с расширениями ключей. Эта запись, если она установлена, должна иметь map в качестве своего значения. Эта запись зарезервирована для разработчиков, которые могут расширять протокол так, как они считают нужным, и, следовательно, нет никаких дополнительных ограничений на его содержимое.
Чтобы гарантировать, что будущие изменения в протоколе не приведут к нарушению работы существующих серверов и клиентов, карта ответов верхнего уровня не должна содержать никаких записей, кроме трех, описанных выше.
Поэтому, если вы собираетесь включить какие-либо дополнительные данные в ответ, было бы целесообразно включить их в extensions
. Вы можете видеть, как это делается с помощью ряда библиотек, которые реализуют такие функции, как управление кэшем, трассировка и анализ затрат. Если вы используете express-graphql
или apollo-server
на серверной части, обе библиотеки позволяют вам специально настраивать расширения, используемые вашей конечной точкой.