AutomatisationAction de Résolution de Requête
Action de Résolution de Requête
Lorsque le serveur GraphQL résout une requête, il déclenche les action hooks suivants avec la réponse GraphQL :
gatographql__executed_query:{$operationName}(uniquement si l'opération GraphQL à exécuter a été fournie)gatographql__executed_query
Les action hooks qui sont déclenchés sont :
// Triggered only if the GraphQL operation to execute was provided
do_action(
"gatographql__executed_query:{$operationName}",
$response,
$isInternalExecution,
$query,
$variables,
);
// Triggered always
do_action(
'gatographql__executed_query',
$response,
$isInternalExecution,
$operationName,
$query,
$variables,
);Les paramètres passés sont :
$response: Un objet de la classePoP\Root\HttpFoundation\Response, contenant la réponse GraphQL (y compris le contenu et les en-têtes)$isInternalExecution:truesi la requête a été exécutée via le Internal GraphQL Server (par exemple : via la classeGatoGraphQL\InternalGraphQLServer\GraphQLServer), oufalsesinon (par exemple : via l'endpoint unique)$operationName: Opération GraphQL exécutée (uniquement pour le deuxième action hook ; dans le premier, elle est implicite dans le nom du hook)$query: Requête GraphQL exécutée$variables: Variables GraphQL fournies
Exemples
Grâce au Internal GraphQL Server, nous pouvons réagir à la résolution d'une requête GraphQL (qu'elle soit exécutée contre le Internal GraphQL Server, l'endpoint unique, un endpoint personnalisé ou une persisted query), et exécuter une autre requête GraphQL contre le Internal GraphQL Server.
Un exemple de flux de travail est :
- Se brancher à l'exécution d'une requête GraphQL, par exemple par son nom d'opération (comme
CreatePost) - Envoyer une notification à l'administrateur, en exécutant la mutation
_sendEmailviaGatoGraphQL\InternalGraphQLServer\GraphQLServer::executeQuery
Ce code PHP enchaîne 2 exécutions de requêtes GraphQL :
GraphQLServer::executeQuery(
<<<GRAPHQL
mutation CreatePost(
\$postTitle: String!,
\$postContent: String!
) {
createPost(input: {
title: \$postTitle
contentAs: { html: \$postContent }
}) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
postID
}
}
GRAPHQL,
[
'postTitle' => 'New post',
'postContent' => 'Some content',
],
'CreatePost'
);
add_action(
"gatographql__executed_query:CreatePost",
function (Response $response) {
/** @var string */
$responseContent = $response->getContent();
/** @var array<string,mixed> */
$responseJSON = json_decode($responseContent, true);
$postID = $responseJSON['data']['createPost']['postID'] ?? null;
if ($postID === null) {
// Do nothing
return;
}
$post = get_post($postID);
// Execute the chained query!
GraphQLServer::executeQuery(
<<<GRAPHQL
mutation SendEmail(
\$emailSubject: String!
\$emailMessage: String!
) {
_sendEmail(
input: {
to: "admin@site.com"
subject: \$emailSubject
messageAs: {
html: \$emailMessage
}
}
) {
status
}
}
GRAPHQL,
[
'emailSubject' => sprintf(__("New post: %s"), $post->post_title),
'emailMessage' => $post->post_content,
]
);
}
);