Extensions - AWS AppSync

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Extensions

Note

Nous prenons désormais principalement en charge le runtime APPSYNC_JS et sa documentation. Pensez à utiliser le runtime APPSYNC_JS et ses guides ici.

$extensionscontient un ensemble de méthodes permettant d'effectuer des actions supplémentaires dans vos résolveurs.

$extensions. evictFromApiCache (chaîne, chaîne, objet) : objet

Élimine un élément du cache AWS AppSync côté serveur. Le premier argument est le nom du type. Le deuxième argument est le nom du champ. Le troisième argument est un objet contenant des éléments de paire clé-valeur qui spécifient la valeur de la clé de mise en cache. Vous devez placer les éléments dans l'objet dans le même ordre que les clés de mise en cache dans le résolveur mis en cache. cachingKey

Note

Cet utilitaire ne fonctionne que pour les mutations, pas pour les requêtes.

$extensions. setSubscriptionFilter(filterJsonObject)

Définit des filtres d'abonnement améliorés. Chaque événement de notification d'abonnement est évalué par rapport aux filtres d'abonnement fournis et envoie des notifications aux clients si tous les filtres répondent aux critèrestrue. L'argument est filterJsonObject tel que décrit ci-dessous.

Note

Vous pouvez utiliser cette méthode d'extension uniquement dans les modèles de mappage des réponses d'un résolveur d'abonnement.

$extensions. setSubscriptionInvalidationFiltre (filterJsonObject)

Définit les filtres d'invalidation des abonnements. Les filtres d'abonnement sont évalués par rapport à la charge utile d'invalidation, puis invalident un abonnement donné s'ils sont évalués à. true L'argument est filterJsonObject tel que décrit ci-dessous.

Note

Vous pouvez utiliser cette méthode d'extension uniquement dans les modèles de mappage des réponses d'un résolveur d'abonnement.

Argument : filterJsonObject

L'objet JSON définit des filtres d'abonnement ou d'invalidation. Il s'agit d'un ensemble de filtres dans unfilterGroup. Chaque filtre est un ensemble de filtres individuels.

{ "filterGroup": [ { "filters" : [ { "fieldName" : "userId", "operator" : "eq", "value" : 1 } ] }, { "filters" : [ { "fieldName" : "group", "operator" : "in", "value" : ["Admin", "Developer"] } ] } ] }

Chaque filtre possède trois attributs :

  • fieldName— Le champ du schéma GraphQL.

  • operator— Le type d'opérateur.

  • value— Les valeurs à comparer à la fieldName valeur de notification d'abonnement.

Voici un exemple d'attribution de ces attributs :

{ "fieldName" : "severity", "operator" : "le", "value" : $context.result.severity }

Domaine : FieldName

Le type de chaîne fieldName fait référence à un champ défini dans le schéma GraphQL qui correspond fieldName à la charge utile de notification d'abonnement. Lorsqu'une correspondance est trouvée, le champ value du schéma GraphQL est comparé à celui du filtre value de notification d'abonnement. Dans l'exemple suivant, le fieldName filtre correspond au service champ défini dans un type GraphQL donné. Si la charge utile de notification contient un service champ avec un value équivalent àAWS AppSync, le filtre est évalué comme suit : true

{ "fieldName" : "service", "operator" : "eq", "value" : "AWS AppSync" }

Champ : valeur

La valeur peut être d'un type différent en fonction de l'opérateur :

  • Un nombre unique ou un booléen

    • Exemples de chaînes :"test", "service"

    • Exemples de chiffres :1,2, 45.75

    • Exemples booléens :, true false

  • Paires de nombres ou de chaînes

    • Exemple de paire de chaînes :["test1","test2"], ["start","end"]

    • Exemple de paire de numéros :[1,4],[67,89], [12.45, 95.45]

  • Tableaux de nombres ou de chaînes

    • Exemple de tableau de chaînes : ["test1","test2","test3","test4","test5"]

    • Exemple de tableau numérique :[1,2,3,4,5], [12.11,46.13,45.09,12.54,13.89]

Domaine : opérateur

Chaîne distinguant majuscules et minuscules avec les valeurs possibles suivantes :

Opérateur Description Types de valeurs possibles
eq Equal integer, float, string, Boolean
ne Not equal integer, float, string, Boolean
le Less than or equal integer, float, string
lt Less than integer, float, string
ge Greater than or equal integer, float, string
gt Greater than integer, float, string
contains Checks for a subsequence or value in the set. integer, float, string
notContains Checks for the absence of a subsequence or absence of a value in the set. integer, float, string
beginsWith Checks for a prefix. string
in Checks for matching elements that are in the list. Array of integer, float, or string
notIn Checks for matching elements that aren't in the list. Array of integer, float, or string
between Between two values integer, float, string
containsAny Contains common elements integer, float, string

Le tableau suivant décrit comment chaque opérateur est utilisé dans la notification d'abonnement.

eq (equal)

L'eqopérateur évalue true si la valeur du champ de notification d'abonnement correspond et est strictement égale à la valeur du filtre. Dans l'exemple suivant, le filtre détermine true si la notification d'abonnement contient un service champ dont la valeur est équivalente àAWS AppSync.

Types de valeurs possibles : entier, flottant, chaîne, booléen

{ "fieldName" : "service", "operator" : "eq", "value" : "AWS AppSync" }
ne (not equal)

L'neopérateur détermine true si la valeur du champ de notification d'abonnement est différente de la valeur du filtre. Dans l'exemple suivant, le filtre détermine true si la notification d'abonnement contient un service champ dont la valeur est différente deAWS AppSync.

Types de valeurs possibles : entier, flottant, chaîne, booléen

{ "fieldName" : "service", "operator" : "ne", "value" : "AWS AppSync" }
le (less or equal)

L'leopérateur détermine true si la valeur du champ de notification d'abonnement est inférieure ou égale à la valeur du filtre. Dans l'exemple suivant, le filtre détermine true si la notification d'abonnement contient un size champ dont la valeur est inférieure ou égale à5.

Types de valeurs possibles : entier, flottant, chaîne

{ "fieldName" : "size", "operator" : "le", "value" : 5 }
lt (less than)

L'ltopérateur détermine true si la valeur du champ de notification d'abonnement est inférieure à la valeur du filtre. Dans l'exemple suivant, le filtre détermine true si la notification d'abonnement contient un size champ dont la valeur est inférieure 5 à.

Types de valeurs possibles : entier, flottant, chaîne

{ "fieldName" : "size", "operator" : "lt", "value" : 5 }
ge (greater or equal)

L'geopérateur détermine true si la valeur du champ de notification d'abonnement est supérieure ou égale à la valeur du filtre. Dans l'exemple suivant, le filtre détermine true si la notification d'abonnement contient un size champ dont la valeur est supérieure ou égale à5.

Types de valeurs possibles : entier, flottant, chaîne

{ "fieldName" : "size", "operator" : "ge", "value" : 5 }
gt (greater than)

L'gtopérateur détermine true si la valeur du champ de notification d'abonnement est supérieure à la valeur du filtre. Dans l'exemple suivant, le filtre détermine true si la notification d'abonnement contient un size champ dont la valeur est supérieure à5.

Types de valeurs possibles : entier, flottant, chaîne

{ "fieldName" : "size", "operator" : "gt", "value" : 5 }
contains

L'containsopérateur vérifie la présence d'une sous-chaîne, d'une sous-séquence ou d'une valeur dans un ensemble ou un élément unique. Un filtre avec l'containsopérateur détermine true si la valeur du champ de notification d'abonnement contient la valeur du filtre. Dans l'exemple suivant, le filtre détermine true si la notification d'abonnement contient un seats champ contenant la valeur 10 du tableau.

Types de valeurs possibles : entier, flottant, chaîne

{ "fieldName" : "seats", "operator" : "contains", "value" : 10 }

Dans un autre exemple, le filtre détermine true si la notification d'abonnement contient un event champ launch sous forme de sous-chaîne.

{ "fieldName" : "event", "operator" : "contains", "value" : "launch" }
notContains

L'notContainsopérateur vérifie l'absence de sous-chaîne, de sous-séquence ou de valeur dans un ensemble ou un élément unique. Le filtre avec l'notContainsopérateur détermine true si la valeur du champ de notification d'abonnement ne contient pas la valeur du filtre. Dans l'exemple suivant, le filtre détermine true si la notification d'abonnement contient un seats champ dans lequel la valeur du tableau ne contient pas la valeur10.

Types de valeurs possibles : entier, flottant, chaîne

{ "fieldName" : "seats", "operator" : "notContains", "value" : 10 }

Dans un autre exemple, le filtre détermine true si la notification d'abonnement contient une valeur de event champ sans launch sa sous-séquence.

{ "fieldName" : "event", "operator" : "notContains", "value" : "launch" }
beginsWith

L'beginsWithopérateur vérifie la présence d'un préfixe dans une chaîne. Le filtre contenant l'beginsWithopérateur détermine true si la valeur du champ de notification d'abonnement commence par la valeur du filtre. Dans l'exemple suivant, le filtre détermine true si la notification d'abonnement contient un service champ dont la valeur commence AWS par.

Type de valeur possible : chaîne

{ "fieldName" : "service", "operator" : "beginsWith", "value" : "AWS" }
in

L'inopérateur vérifie les éléments correspondants dans un tableau. Le filtre contenant l'inopérateur détermine true si la valeur du champ de notification d'abonnement existe dans un tableau. Dans l'exemple suivant, le filtre détermine true si la notification d'abonnement contient un severity champ contenant l'une des valeurs présentes dans le tableau :[1,2,3].

Type de valeur possible : tableau de nombres entiers, flottants ou chaînes

{ "fieldName" : "severity", "operator" : "in", "value" : [1,2,3] }
notIn

L'notInopérateur vérifie s'il n'y a pas d'éléments manquants dans un tableau. Le filtre contenant l'notInopérateur détermine true si la valeur du champ de notification d'abonnement n'existe pas dans le tableau. Dans l'exemple suivant, le filtre détermine true si la notification d'abonnement contient un severity champ contenant l'une des valeurs absentes du tableau :[1,2,3].

Type de valeur possible : tableau de nombres entiers, flottants ou chaînes

{ "fieldName" : "severity", "operator" : "notIn", "value" : [1,2,3] }
between

L'betweenopérateur vérifie les valeurs comprises entre deux nombres ou chaînes. Le filtre contenant l'betweenopérateur détermine true si la valeur du champ de notification d'abonnement se situe entre la paire de valeurs du filtre. Dans l'exemple suivant, le filtre détermine true si la notification d'abonnement contient un severity champ contenant des valeurs2,3,4.

Types de valeurs possibles : paire d'entiers, de nombres flottants ou de chaînes

{ "fieldName" : "severity", "operator" : "between", "value" : [1,5] }
containsAny

L'containsAnyopérateur vérifie la présence d'éléments communs dans les tableaux. Un filtre avec l'containsAnyopérateur évalue true si l'intersection entre la valeur définie du champ de notification d'abonnement et la valeur définie du filtre n'est pas vide. Dans l'exemple suivant, le filtre détermine true si la notification d'abonnement contient un seats champ dont la valeur du tableau contient soit 10 ou15. Cela signifie que le filtre évaluera true si la valeur du seats champ de la notification d'abonnement est égale à [10,11] ou[15,20,30].

Types de valeurs possibles : entier, flottant ou chaîne

{ "fieldName" : "seats", "operator" : "contains", "value" : [10, 15] }

Logique AND

Vous pouvez combiner plusieurs filtres à l'aide de la logique AND en définissant plusieurs entrées dans l'filtersobjet du filterGroup tableau. Dans l'exemple suivant, les filtres évaluent true si la notification d'abonnement contient un userId champ avec une valeur équivalente à 1 ET une valeur de group champ égale à Admin ouDeveloper.

{ "filterGroup": [ { "filters" : [ { "fieldName" : "userId", "operator" : "eq", "value" : 1 }, { "fieldName" : "group", "operator" : "in", "value" : ["Admin", "Developer"] } ] } ] }

Logique OR

Vous pouvez combiner plusieurs filtres à l'aide de la logique OR en définissant plusieurs objets de filtre dans le filterGroup tableau. Dans l'exemple suivant, les filtres évaluent true si la notification d'abonnement contient un userId champ avec une valeur équivalente à 1 OU une valeur de group champ égale à Admin ouDeveloper.

{ "filterGroup": [ { "filters" : [ { "fieldName" : "userId", "operator" : "eq", "value" : 1 } ] }, { "filters" : [ { "fieldName" : "group", "operator" : "in", "value" : ["Admin", "Developer"] } ] } ] }

Exceptions

Notez que l'utilisation des filtres est soumise à plusieurs restrictions :

  • Dans l'filtersobjet, il peut y avoir un maximum de cinq fieldName éléments uniques par filtre. Cela signifie que vous pouvez combiner un maximum de cinq fieldName objets individuels à l'aide de la logique AND.

  • Il peut y avoir un maximum de vingt valeurs pour l'containsAnyopérateur.

  • Il peut y avoir un maximum de cinq valeurs pour les notIn opérateurs in et.

  • Chaque chaîne peut comporter au maximum 256 caractères.

  • Chaque comparaison de chaînes fait la distinction majuscules/minuscules.

  • Le filtrage d'objets imbriqués permet jusqu'à cinq niveaux de filtrage imbriqués.

  • Chacun filterGroup peut en avoir un maximum de 10filters. Cela signifie que vous pouvez en combiner un maximum de 10 filters en utilisant la logique OR.

    • L'inopérateur est un cas particulier de la logique OR. Dans l'exemple suivant, il y en a deux filters :

      { "filterGroup": [ { "filters" : [ { "fieldName" : "userId", "operator" : "eq", "value" : 1 }, { "fieldName" : "group", "operator" : "in", "value" : ["Admin", "Developer"] } ] } ] }

      Le groupe de filtres précédent est évalué comme suit et est pris en compte dans le calcul de la limite maximale de filtres :

      { "filterGroup": [ { "filters" : [ { "fieldName" : "userId", "operator" : "eq", "value" : 1 }, { "fieldName" : "group", "operator" : "eq", "value" : "Admin" } ] }, { "filters" : [ { "fieldName" : "userId", "operator" : "eq", "value" : 1 }, { "fieldName" : "group", "operator" : "eq", "value" : "Developer" } ] } ] }

$extensions.invalidateSubscriptions () invalidationJsonObject

Utilisé pour initier l'invalidation d'un abonnement suite à une mutation. L'argument est invalidationJsonObject tel que décrit ci-dessous.

Note

Cette extension ne peut être utilisée que dans les modèles de mappage des réponses des résolveurs de mutations.

Vous ne pouvez utiliser qu'au maximum cinq appels de $extensions.invalidateSubscriptions() méthode uniques par requête. Si vous dépassez cette limite, vous recevrez une erreur GraphQL.

Argument : invalidationJsonObject

invalidationJsonObjectdéfinit les éléments suivants :

  • subscriptionField— L'abonnement au schéma GraphQL à invalider. Un seul abonnement, défini sous la forme d'une chaîne dans lesubscriptionField, est considéré comme invalide.

  • payload— Une liste de paires clé-valeur utilisée comme entrée pour invalider les abonnements si le filtre d'invalidation est évalué par rapport à leurs valeurs. true

    L'exemple suivant invalide les clients abonnés et connectés utilisant l'onUserDeleteabonnement lorsque le filtre d'invalidation défini dans le résolveur d'abonnement est évalué par rapport à la valeur. true payload

    $extensions.invalidateSubscriptions({ "subscriptionField": "onUserDelete", "payload": { "group": "Developer" "type" : "Full-Time" } })