Schema Functions
Открывайте возможности языка программирования PHP через поля и директивы GraphQL.

Click to watch tutorial video - 07:54
Схема GraphQL обогащается полями и директивами, открывающими возможности языка программирования PHP.
Функциональные поля
Функциональные поля являются глобальными, поэтому они добавляются во все типы схемы GraphQL: в QueryRoot, а также в Post, User и др.
Функциональные поля полезны для работы с данными после их получения — они позволяют преобразовывать значение поля любым необходимым способом и предоставляют мощные возможности импорта и экспорта данных.
Например, хотя у нас есть поле Post.hasComments, может потребоваться противоположное значение. Вместо создания нового поля Post.notHasComments (для чего потребовалось бы редактировать PHP-код) можно использовать функцию Field to Input, чтобы передать значение из hasComments в поле not и вычислить новое значение прямо внутри запроса GraphQL:
query {
posts {
id
hasComments
notHasComments: _not(value: $__hasComments)
}
}Функциональные директивы
Схема GraphQL обогащается директивами, открывающими функциональность, типичную для языков программирования (таких как PHP).
Директивные поля полезны для работы с данными после их получения — они позволяют преобразовывать значение поля любым необходимым способом и предоставляют мощные возможности импорта и экспорта данных.
Например, этот запрос:
query {
posts {
title @strUpperCase
}
}...вернёт следующий ответ:
{
"data": {
"posts": [
{
"title": "HELLO WORLD!"
},
{
"title": "LOVELY WEATHER"
}
]
}
}Вспомогательные поля
В схему GraphQL добавляются поля, предоставляющие часто используемую вспомогательную функциональность.
Вспомогательные поля являются глобальными, поэтому они добавляются во все типы схемы GraphQL: в QueryRoot, а также в Post, User и др.
В этом запросе мы получаем идентификаторы пользователей сайта и выполняем новый GraphQL-запрос, передавая их 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, но также возможно определённой в другом месте).
Этот запрос извлекает константу окружения GITHUB_ACCESS_TOKEN, которую можно настроить для доступа к приватному репозиторию на GitHub:
query {
githubAccessToken: _env(name: "GITHUB_ACCESS_TOKEN")
}Отправка электронной почты
Схема GraphQL обогащается глобальной мутацией _sendEmail.
Мутация _sendEmail отправляет электронные письма, вызывая функцию WordPress wp_mail. В результате будет использована конфигурация отправки электронной почты, заданная в WordPress (например, выбранный SMTP-провайдер).
Письмо может быть отправлено с типом содержимого «text» или «HTML» — в зависимости от значения входного параметра messageAs (который является InputObject типа «oneof», поэтому можно указать только одно из его свойств).
mutation {
_sendEmail(
input: {
to: "target@email.com"
subject: "Email with text content"
messageAs: {
text: "Hello world!"
}
}
) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
}
}