Règle MonétisationLimitsCheck

Cette page s'applique à Apigee et à Apigee hybrid.

Consultez la documentation d'Apigee Edge.

icône de la règle

Présentation

La règle MonetizationLimitsCheck vous permet d'appliquer des limites de monétisation.

Plus précisément, la règle est déclenchée si le développeur de l'application accédant à l'API monétisée n'a pas souscrit d'abonnement au produit d'API associé ou si le solde du développeur est insuffisant. Dans ce cas, la règle MonetizationLimitsCheck génère une erreur et bloque un appel d'API. Pour plus d'informations, consultez la section Appliquer des abonnements développeurs aux produits d'API.

Lorsque vous associez la règle MonetizationLimitsCheck à un proxy d'API, les variables de flux mint.limitscheck.* et mint.subscription_* sont renseignées, comme décrit dans la documentation de référence sur les variables de flux mint.

Cette règle est une règle extensible et son utilisation peut avoir des conséquences sur le coût ou l'utilisation, en fonction de votre licence Apigee. Pour en savoir plus sur les types de règles et les implications en termes d'utilisation, consultez la section Types de règles.

<MonetizationLimitsCheck>

Définit la règle MonetizationLimitsCheck

Valeur par défaut N/A
Obligatoire ? Obligatoire
Type Type complexe
Élément parent N/A
Éléments enfants <DisplayName>
<FaultResponse>
<IgnoreUnresolvedVariables>

Le tableau suivant fournit une description détaillée des éléments enfants de <MonetizationLimitsCheck> :

Élément enfant Obligatoire ? Description
<DisplayName> Facultatif Nom personnalisé de la règle.
<FaultResponse> Facultatif Définit le message de réponse renvoyé au client à l'origine de la requête.
<IgnoreUnresolvedVariables> Facultatif Ignore toutes les erreurs de variable non résolues dans le flux.

L'élément <MonetizationLimitsCheck> utilise la syntaxe suivante :

Syntaxe

<?xml version="1.0" encoding="UTF-8" standalone="no"?><MonetizationLimitsCheck continueOnError="[true|false]" enabled="[true|false]" name="policy_name">
   <DisplayName>POLICY_DISPLAY_NAME</DisplayName>
   <FaultResponse>
        <AssignVariable>
          <Name/>
          <Value/>
        </AssignVariable>
        <Add>
            <Headers/>
        </Add>
        <Copy source="request">
            <Headers/>
            <StatusCode/>
       </Copy>
        <Remove>
            <Headers/>
        </Remove>
        <Set>
            <Headers/>
            <Payload/>
            <StatusCode/>
        </Set>
    </FaultResponse>
    <IgnoreUnresolvedVariables>VALUE</IgnoreUnresolvedVariables>
</MonetizationLimitsCheck>

Exemple

Dans l'exemple suivant, si un développeur n'a pas acheté d'abonnement au produit d'API associé, l'accès à l'API monétisée est bloqué et un état 403 est renvoyé avec un message personnalisé.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MonetizationLimitsCheck continueOnError="false" enabled="true" name="MonetizationLimitsCheck-1">
  <DisplayName>Monetization-Limits-Check-1</DisplayName>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <FaultResponse>
    <Set>
      <Payload contentType="text/xml">
        <error>
          <messages>
            <message>Usage has been exceeded ({mint.limitscheck.isRequestBlocked}) or app developer has been suspended</message>
          </messages>
        </error>
      </Payload>
      <StatusCode>403</StatusCode>
    </Set>
  </FaultResponse>
</MonetizationLimitsCheck>

Cet élément possède les attributs suivants qui sont communs à toutes les règles :

Attribut Par défaut Obligatoire ? Description
name ND Obligatoire

Nom interne de la règle. La valeur de l'attribut name peut contenir des lettres, des chiffres, des espaces, des tirets, des traits de soulignement et des points. Cette valeur ne peut pas dépasser 255 caractères.

Vous pouvez également utiliser l'élément <DisplayName> pour ajouter un libellé à la règle dans l'éditeur de proxy de l'interface utilisateur de gestion avec un nom différent, en langage naturel.

continueOnError faux Facultatif Définissez sur false pour afficher une erreur en cas d'échec d'une règle. Il s'agit du comportement attendu pour la plupart des règles. Définissez sur true pour que l'exécution du flux se poursuive même après l'échec d'une règle. Voir aussi :
enabled true Facultatif Définissez sur true pour appliquer la règle. Définissez sur false pour désactiver la règle. La règle ne sera pas appliquée même si elle reste associée à un flux.
async   faux Obsolète Cet attribut est obsolète.

Référence d'élément enfant

Cette section décrit les éléments enfants de <MonetizationLimitsCheck>.

<DisplayName>

Utilisez-le, en plus de l'attribut name, pour appliquer un libellé à la règle dans l'éditeur de proxys de l'interface de gestion en utilisant un nom différent et plus naturel.

L'élément <DisplayName> est commun à toutes les règles.

Valeur par défaut N/A
Obligatoire ? Facultatif. Si vous omettez <DisplayName>, la valeur de l'attribut name de la règle est utilisée.
Type Chaîne
Élément parent <PolicyElement>
Éléments enfants Aucun

L'élément <DisplayName> utilise la syntaxe suivante :

Syntaxe

<PolicyElement>
  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>
  ...
</PolicyElement>

Exemple

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

L'élément <DisplayName> ne comporte aucun attribut ni élément enfant.

<FaultResponse>

Définit le message de réponse renvoyé au client à l'origine de la requête. FaultResponse utilise les mêmes paramètres que l'élément <FaultResponse> dans la stratégie RaiseFault.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Type complexe
Élément parent <MonetizationLimitsCheck>
Éléments enfants <AssignVariable>
<Add>
<Copy>
<Remove>
<Set>

<AssignVariable>

Attribue une valeur à une variable de flux de destination. Si la variable de flux n'existe pas, AssignVariable la crée.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Type complexe
Élément parent <FaultResponse>
Éléments enfants <Name>
<Value>

Par exemple, utilisez le code suivant pour définir la variable nommée myFaultVar dans la règle MonetizationLimitsCheck :

<FaultResponse>
<AssignVariable>
  <Name>myFaultVar</Name>
  <Value>42</Value>
</AssignVariable>
</FaultResponse>

Une règle dans une règle d'erreur peut ensuite accéder à la variable. Par exemple, la règle d'attribution de message suivante utilise la variable pour définir un en-tête dans la réponse d'erreur :

<AssignMessage enabled="true" name="Assign-Message-1">
<Add>
  <Headers>
    <Header name="newvar">{myFaultVar}</Header>
  </Headers>
</Add>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

L'élément <AssignVariable> de la règle MonetizationLimitsCheck utilise la même syntaxe que l'élément <AssignVariable> de la règle AssignMessage.

<Name>

Nom de la variable. Pour en savoir plus, consultez l'élément Name (Nom) dans la stratégie AssignMessage.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Chaîne
Élément parent <AssignVariable>
Éléments enfants Aucun
<Value>

Valeur de la variable. Pour en savoir plus, consultez l'élément Value (Valeur) dans la stratégie AssignMessage.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Chaîne
Élément parent <AssignVariable>
Éléments enfants Aucun

<Add>

Ajoute des en-têtes HTTP au message d'erreur.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Type complexe
Élément parent <FaultResponse>
Éléments enfants <Headers>
<Headers>

Spécifie l'en-tête HTTP à ajouter, définir, copier ou supprimer.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Type complexe
Élément parent <Add>
<Copy>
<Remove>
<Set>
Éléments enfants Aucun

Exemples :

Ajouter un en-tête

L'exemple suivant copie la valeur de la variable de flux request.user.agent dans l'en-tête :

<Add>
    <Headers>
        <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
</Add>
Définir l'entête

L'exemple suivant définit l'en-tête user-agent sur la variable de message spécifiée avec l'élément <AssignTo>.

<Set>
    <Headers>
        <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
</Set>
Copier l'en-tête - 1

L'exemple suivant copie la valeur headerA de la requête :

<Copy source='request'>
    <Headers>
        <Header name="headerA"/>
    </Headers>
</Copy>
Copier l'en-tête - 2

L'exemple suivant copie plusieurs en-têtes :

<Copy source='request'>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
</Copy>

Cet exemple copie "h1", "h2" et la deuxième valeur de "h3". Si "h3" n'a qu'une seule valeur, le paramètre "h3" n'est pas copié.

Supprimer l'en-tête - 1

L'exemple suivant supprime un en-tête :

<Remove>
    <Headers>
        <Header name="user-agent"/>
    </Headers>
</Remove>
Supprimer l'en-tête - 2

L'exemple suivant permet de supprimer plusieurs en-têtes :

<Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
</Remove>

Cet exemple supprime "h1", "h2" et la deuxième valeur de "h3". Si "h3" n'a qu'une seule valeur, le paramètre "h3" n'est pas supprimé.

<Copy>

Copie les informations depuis le message spécifié par l'attribut source vers le message d'erreur.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Type complexe
Élément parent <FaultResponse>
Éléments enfants <Headers>
<StatusCode>

Le tableau suivant décrit les attributs de <Copy> :

Attribut Obligatoire ? Type Description
source Facultatif Chaîne

Spécifie l'objet source de la copie.

  • Si la source n'est pas spécifiée, l'objet est traité comme un message simple. Par exemple, si la règle se trouve dans le flux de requête, la source est définie par défaut sur l'objet de requête. Si la règle se trouve dans le flux de réponse, elle utilise par défaut l'objet de réponse. Si vous omettez la source, vous pouvez utiliser une référence absolue à une variable de flux en tant que source de la copie. Par exemple, spécifiez la valeur en tant que {request.header.user-agent}.
  • Si la variable source ne peut pas être résolue ou est associée à un type qui n'est pas un message, <Copy> ne répond pas.
<StatusCode>

Spécifie le code d'état HTTP dans le message d'erreur. Vous pouvez copier ou définir la valeur de l'objet spécifié par l'attribut source.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Type complexe
Élément parent <Copy>
<Set>
Éléments enfants Aucun

Exemple :

Copier le code d'état
<Copy source='response'>
    <StatusCode>404</StatusCode>
</Copy>
Définir le code d'état
<Set source='request'>
    <StatusCode>404</StatusCode>
</Set>

<Remove>

Supprime les en-têtes HTTP spécifiés du message d'erreur. Pour supprimer tous les en-têtes, spécifiez <Remove><Headers/></Remove>.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Type complexe
Élément parent <FaultResponse>
Éléments enfants <Headers>

<Set>

Définit les informations dans le message d'erreur.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Type complexe
Élément parent <FaultResponse>
Éléments enfants <Headers>
<Payload>
<StatusCode>
<Payload>

Définit la charge utile du message d'erreur.

Valeur par défaut N/A
Obligatoire ? Facultatif
Type Chaîne
Élément parent <Set>
Éléments enfants Aucun

Exemples :

Définir la charge utile du texte
<Set>
    <Payload contentType="text/plain">test1234</Payload>
</Set>
Définir la charge utile JSON - 1
<Set>
    <Payload contentType="application/json">
        {"name":"foo", "type":"bar"}
    </Payload>
</Set>
Définir la charge utile JSON - 2
<Set>
    <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
        {"name":"foo", "type":"@variable_name#"}
    </Payload>
</Set>

Cet exemple insère des variables en utilisant les attributs variablePrefix et variableSuffix avec des caractères de délimitation.

Définir la charge utile JSON - 3
<Set>
    <Payload contentType="application/json">
        {"name":"foo", "type":"{variable_name}"}
    </Payload>
</Set>

Cet exemple insère des variables à l'aide d'accolades. Vous pouvez utiliser des accolades à partir de la version 16.08.17.

Définir la charge utile XML
<Set>
    <Payload contentType="text/xml">
        <root>
          <e1>sunday</e1>
          <e2>funday</e2>
          <e3>{var1}</e3>
    </Payload>
</Set>

Cet exemple insère des variables à l'aide d'accolades. Vous pouvez utiliser des accolades à partir de la version 16.08.17.

<IgnoreUnresolvedVariables>

Détermine si le traitement s'arrête lorsqu'une variable non résolue est rencontrée.

Définissez la valeur sur true pour ignorer les variables non résolues et poursuivre le traitement, sinon false. La valeur par défaut est true.

Définir <IgnoreUnresolvedVariables> sur true n'est pas la même chose que définir la valeur continueOnError de <MonetizationLimitsCheck> sur true. Si vous définissez continueOnError sur true, Apigee ignore toutes les erreurs, et pas seulement les erreurs dans les variables.

L'élément <IgnoreUnresolvedVariables> utilise la syntaxe suivante :

Syntaxe

<IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>

Exemple

L'exemple suivant définit <IgnoreUnresolvedVariables> sur false :

<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>

Codes d'erreur

Cette section décrit les codes d'erreur et les messages d'erreur renvoyés et les variables d'erreur définies par Apigee lorsque cette règle déclenche une erreur. Ces informations sont importantes si vous développez des règles de défaillance afin de gérer les pannes. Pour en savoir plus, consultez les pages Ce que vous devez savoir à propos des erreurs liées aux règles et Gérer les pannes.

Erreurs d'exécution

Ces erreurs peuvent se produire lors de l'exécution de la règle.

Code d'erreur État HTTP Cause
mint.service.subscription_not_found_for_developer 500 Cette erreur se produit lorsqu'un développeur n'est pas abonné au produit d'API.
mint.service.wallet_not_found_for_developer 500 Cette erreur se produit lorsqu'un développeur disposant d'une réserve prépayée tente d'utiliser une API monétisée sans conserver de portefeuille pour la devise spécifiée dans le plan tarifaire.
mint.service.developer_usage_exceeds_balance 500 Cette erreur se produit lorsque l'utilisation d'un développeur disposant d'un réserve prépayée dépasse le solde de son portefeuille.
mint.service.wallet_blocked_due_to_inactivity 500 Cette erreur se produit lorsque le portefeuille d'un développeur disposant d'une réserve prépayée n'est pas crédité pendant plus de 1,5 an et que le développeur tente d'utiliser une API.

Variables de panne

Chaque fois qu'une règle comporte des erreurs d'exécution, Apigee génère des messages d'erreur. Vous pouvez afficher ces messages d'erreur dans la réponse d'erreur. Souvent, les messages d'erreur générés par le système peuvent ne pas être pertinents dans le contexte de votre produit. Vous pouvez personnaliser les messages d'erreur en fonction du type d'erreur pour rendre les messages plus significatifs.

Pour personnaliser les messages d'erreur, vous pouvez utiliser des règles d'erreur ou la règle RaiseFault. Pour en savoir plus sur les différences entre les règles d'erreur et la règle RaiseFault, consultez la section Règles d'erreur et règle RaiseFault. Vous devez vérifier les conditions à l'aide de l'élément Condition dans les règles d'erreur et dans la règle RaiseFault. Apigee fournit des variables d'erreur propres à chaque règle et les valeurs des variables d'erreur sont définies lorsqu'une règle déclenche des erreurs d'exécution. En utilisant ces variables, vous pouvez vérifier des conditions d'erreur spécifiques et prendre les mesures appropriées. Pour en savoir plus sur la vérification des conditions d'erreur, consultez la page Conditions de création.

Variables Lieu Exemple
fault.name L'élément fault.name peut correspondre à n'importe quelle erreur affichée dans le tableau Erreurs d'exécution. Le nom d'erreur est la dernière partie du code d'erreur. fault.name Matches "UnresolvedVariable"
MonetizationLimitsCheck.POLICY_NAME.failed POLICY_NAME est le nom spécifié par l'utilisateur de la règle qui a provoqué l'erreur. MonetizationLimitsCheck.monetization-limits-check-1.failed = true
Pour en savoir plus sur les erreurs de règles, consultez la section Ce que vous devez savoir sur les erreurs liées aux règles.

Variables de flux

Les variables de flux prédéfinies suivantes sont automatiquement renseignées lors de l'exécution de la règle MonetizationLimitsCheck. Pour en savoir plus, consultez les variables de flux mint.

Variable de flux Description
mint.limitscheck.is_request_blocked true pour les requêtes bloquées.
mint.limitscheck.is_subscription_found true si un abonnement à l'API est détecté.
mint.limitscheck.purchased_product_name Nom du produit d'API acheté. Exemple : MyProduct.
mint.limitscheck.status_message Message d'état. Exemple : limits_check_success.
mint.subscription_end_time_ms Heure de fin de l'abonnement au produit d'API.
mint.subscription_start_time_ms Heure de début de l'abonnement au produit d'API. Exemple : 1618433956209.