
Возможность:
Функции схемы
Функции схемы
Схема GraphQL оснащена полями и директивами, которые открывают доступ к функциональности языка программирования PHP.
Поля функций
Поля функций являются глобальными полями и поэтому добавляются ко всем типам в схеме GraphQL: в QueryRoot, а также в Post, User и т.д.
Поля функций полезны для обработки данных после их получения — они позволяют преобразовывать значение поля любым необходимым способом и предоставляют мощные возможности импорта/экспорта данных.
Например, несмотря на то что у нас есть поле Post.hasComments, может понадобиться противоположное значение. Вместо того чтобы создавать новое поле Post.notHasComments (для чего потребовалось бы редактировать PHP-код), можно использовать функцию Field to Input, чтобы передать значение из hasComments в поле not и таким образом вычислить новое значение непосредственно внутри GraphQL query:
query {
posts {
id
hasComments
notHasComments: _not(value: $__hasComments)
}
}Директивы функций
Схема GraphQL оснащена директивами, которые открывают доступ к функциональности, распространённой в языках программирования (например, PHP).
Директивы полей полезны для обработки данных после их получения — они позволяют преобразовывать значение поля любым необходимым способом и предоставляют мощные возможности импорта/экспорта данных.
Например, этот query:
query {
posts {
title @strUpperCase
}
}...вернёт следующий ответ:
{
"data": {
"posts": [
{
"title": "HELLO WORLD!"
},
{
"title": "LOVELY WEATHER"
}
]
}
}Вспомогательные поля
В схему GraphQL добавляются поля, предоставляющие часто используемую вспомогательную функциональность.
Вспомогательные поля являются глобальными полями и поэтому добавляются ко всем типам в схеме GraphQL: в QueryRoot, а также в Post, User и т.д.
В этом query мы получаем идентификаторы пользователей сайта и выполняем новый GraphQL query, передавая их ID в качестве параметра:
query {
users {
userID: id
url: _urlAddParams(
url: "https://somewebsite/endpoint/user-data",
params: {
userID: $__userID
}
)
headers: _httpRequestHeaders
headerNameValueEntryList: _objectConvertToNameValueEntryList(
object: $__headers
)
_sendHTTPRequest(input: {
url: $__url
options: {
headers: $__headerNameValueEntryList
}
}) {
statusCode
contentType
body
}
}
}Поля окружения
Схема GraphQL оснащена глобальным полем _env, которое позволяет получить значение переменной окружения или PHP-константы (чаще всего определяемой в wp-config.php, но которая может быть определена и в другом месте).
Этот query получает константу окружения GITHUB_ACCESS_TOKEN, которую можно настроить для доступа к приватному репозиторию на GitHub:
query {
githubAccessToken: _env(name: "GITHUB_ACCESS_TOKEN")
}