Diese Seite gilt für Apigee und Apigee Hybrid.
Apigee Edge-Dokumentation aufrufen
Übersicht
Mit der Richtlinie "MonetizationLimitsCheck" können Sie die Monetarisierungslimits erzwingen.
Insbesondere wird die Richtlinie ausgelöst, wenn der App-Entwickler, der auf die monetarisierte API zugreift, kein Abo für das zugehörige API-Produkt erworben hat oder wenn der Entwickler über kein ausreichendes Guthaben verfügt. In diesem Fall löst die Richtlinie "MonetizationLimitsCheck" einen Fehler aus und blockiert den API-Aufruf. Weitere Informationen finden Sie unter Entwicklerabos für API-Produkte durchsetzen.
Wenn Sie die Richtlinie "MonetizationLimitsCheck" an einen API-Proxy anhängen, werden die Ablaufvariablen mint.limitscheck.* und mint.subscription_* ausgefüllt, wie in der Referenz zu Mint-Ablaufvariablen beschrieben.
Diese Richtlinie ist eine erweiterbare Richtlinie, deren Verwendung je nach Apigee-Lizenz Auswirkungen auf die Kosten oder die Nutzung haben kann. Informationen zu Richtlinientypen und Auswirkungen auf die Nutzung finden Sie unter Richtlinientypen.
<MonetizationLimitsCheck>
Definiert die MonetizationLimitsCheck-Richtlinie.
| Standardwert | – |
| Erforderlich? | Erforderlich |
| Typ | Komplexer Typ |
| Übergeordnetes Element | – |
| Untergeordnete Elemente |
<DisplayName><FaultResponse><IgnoreUnresolvedVariables> |
Die folgende Tabelle enthält eine allgemeine Beschreibung der untergeordneten Elemente von <MonetizationLimitsCheck>:
| Untergeordnetes Element | Erforderlich? | Beschreibung |
|---|---|---|
<DisplayName> |
Optional | Ein benutzerdefinierter Name für die Richtlinie. |
<FaultResponse> |
Optional | Definiert die Antwortnachricht, die an den anfordernden Client zurückgegeben wird. |
<IgnoreUnresolvedVariables> |
Optional | Ignorieren Sie eventuelle nicht behobene Variablenfehler im Ablauf. |
Das <MonetizationLimitsCheck>-Element verwendet die folgende Syntax:
Syntax
<?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>
Beispiel
Im folgenden Beispiel wird, wenn ein Entwickler kein Abo für das zugehörige API-Produkt erworben hat, der Zugriff auf die monetarisierte API gesperrt und ein 403-Status mit einer benutzerdefinierten Meldung zurückgegeben.
<?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>
This element has the following attributes that are common to all policies:
| Attribute | Default | Required? | Description |
|---|---|---|---|
name |
N/A | Required |
The internal name of the policy. The value of the Optionally, use the |
continueOnError |
false | Optional | Set to false to return an error when a policy fails. This is expected behavior for
most policies. Set to true to have flow execution continue even after a policy
fails. See also:
|
enabled |
true | Optional | Set to true to enforce the policy. Set to false to turn off the
policy. The policy will not be enforced even if it remains attached to a flow. |
async |
false | Deprecated | This attribute is deprecated. |
Verweis auf untergeordnetes Element
In diesem Abschnitt werden die untergeordneten Elemente von<MonetizationLimitsCheck> beschrieben.
<DisplayName>
Use in addition to the name attribute to label the policy in the
management UI proxy editor with a different, more natural-sounding name.
The <DisplayName> element is common to all policies.
| Default Value | N/A |
| Required? | Optional. If you omit <DisplayName>, the value of the
policy's name attribute is used. |
| Type | String |
| Parent Element | <PolicyElement> |
| Child Elements | None |
The <DisplayName> element uses the following syntax:
Syntax
<PolicyElement> <DisplayName>POLICY_DISPLAY_NAME</DisplayName> ... </PolicyElement>
Example
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
The <DisplayName> element has no attributes or child elements.
<FaultResponse>
Definiert die Antwortnachricht, die an den anfordernden Client zurückgegeben wird. FaultResponse verwendet in der RaiseFault-Richtlinie dieselben Einstellungen wie das <FaultResponse>-Element.
| Standardwert | – |
| Erforderlich? | Optional |
| Typ | Komplexer Typ |
| Übergeordnetes Element |
<MonetizationLimitsCheck> |
| Untergeordnete Elemente |
<AssignVariable><Add><Copy><Remove><Set> |
<AssignVariable>
Weist einer Zielablaufvariable einen Wert zu.
Wenn die Ablaufvariable nicht vorhanden ist, wird sie von AssignVariable erstellt.
| Standardwert | – |
| Erforderlich? | Optional |
| Typ | Komplexer Typ |
| Übergeordnetes Element |
<FaultResponse> |
| Untergeordnete Elemente |
<Name><Value> |
Verwenden Sie beispielsweise den folgenden Code, um die Variable mit dem Namen myFaultVar in der Richtlinie "MonetizationLimitsCheck" festzulegen:
<FaultResponse> <AssignVariable> <Name>myFaultVar</Name> <Value>42</Value> </AssignVariable> </FaultResponse>
Eine Richtlinie in einer Fehlerregel kann dann auf die Variable zugreifen. Die folgende AssignMessage-Richtlinie verwendet die Variable zum Festlegen eines Headers in der Fehlerantwort:
<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>
<AssignVariable> in der Richtlinie MonetizationLimitsCheck verwendet die gleiche Syntax wie das Element <AssignVariable> in der AssignMessage-Richtlinie.
<Name>
Variablenname. Weitere Informationen finden Sie unter Name in der Richtlinie „AssignMessage“.
| Standardwert | – |
| Erforderlich? | Optional |
| Typ | String |
| Übergeordnetes Element |
<AssignVariable> |
| Untergeordnete Elemente | Keine |
<Value>
Variablenwert. Weitere Informationen finden Sie unter Wert in der Richtlinie „AssignMessage“.
| Standardwert | – |
| Erforderlich? | Optional |
| Typ | String |
| Übergeordnetes Element |
<AssignVariable> |
| Untergeordnete Elemente | Keine |
<Add>
Fügt HTTP-Header zur Fehlermeldung hinzu.
| Standardwert | – |
| Erforderlich? | Optional |
| Typ | Komplexer Typ |
| Übergeordnetes Element |
<FaultResponse> |
| Untergeordnete Elemente |
<Headers> |
<Headers>
Gibt den HTTP-Header an, der hinzugefügt, festgelegt, kopiert oder entfernt werden soll.
| Standardwert | – |
| Erforderlich? | Optional |
| Typ | Komplexer Typ |
| Übergeordnetes Element |
<Add><Copy><Remove><Set> |
| Untergeordnete Elemente | Keine |
Beispiele:
Header hinzufügen
Im folgenden Beispiel wird der Wert der Ablaufvariablen request.user.agent in den Header kopiert:
<Add>
<Headers>
<Header name="user-agent">{request.user.agent}</Header>
</Headers>
</Add>Header festlegen
Im folgenden Beispiel wird der user-agent-Header auf die Nachrichtenvariable gesetzt, die mit dem <AssignTo>-Element angegeben wird.
<Set>
<Headers>
<Header name="user-agent">{request.header.user-agent}</Header>
</Headers>
</Set>Header kopieren – 1
Im folgenden Beispiel wird headerA aus der Anfrage kopiert:
<Copy source='request'>
<Headers>
<Header name="headerA"/>
</Headers>
</Copy>Header kopieren – 1
Im folgenden Beispiel werden mehrere Header kopiert:
<Copy source='request'>
<Headers>
<Header name="h1"/>
<Header name="h2"/>
<Header name="h3.2"/>
</Headers>
</Copy>In diesem Beispiel werden "h1", "h2" und der zweite Wert von "h3" kopiert. Wenn „h3“ nur einen Wert hat, wird „h3“ nicht kopiert.
Header entfernen – 1
Im folgenden Beispiel wird ein Header entfernt:
<Remove>
<Headers>
<Header name="user-agent"/>
</Headers>
</Remove>Header entfernen – 2
Im folgenden Beispiel werden mehrere Header entfernt:
<Remove>
<Headers>
<Header name="h1"/>
<Header name="h2"/>
<Header name="h3.2"/>
</Headers>
</Remove>In diesem Beispiel werden "h1", "h2" und der zweite Wert von "h3" entfernt. Wenn „h3“ nur einen Wert hat, wird „h3“ nicht entfernt.
<Copy>
Kopiert Informationen von der durch das Attribut source angegebenen Nachricht an die Fehlermeldung.
| Standardwert | – |
| Erforderlich? | Optional |
| Typ | Komplexer Typ |
| Übergeordnetes Element |
<FaultResponse> |
| Untergeordnete Elemente |
<Headers><StatusCode> |
In der folgenden Tabelle werden die Attribute von <Copy> beschrieben:
| Attribut | Erforderlich? | Typ | Beschreibung |
|---|---|---|---|
| Quelle | Optional | String |
Gibt das Quellobjekt der Kopie an.
|
<StatusCode>
Gibt den HTTP-Statuscode in der Fehlermeldung an. Sie können den Wert für das im Attribut source angegebene Objekt kopieren oder festlegen.
| Standardwert | – |
| Erforderlich? | Optional |
| Typ | Komplexer Typ |
| Übergeordnetes Element |
<Copy><Set> |
| Untergeordnete Elemente | Keine |
Beispiel:
Statuscode kopieren
<Copy source='response'>
<StatusCode>404</StatusCode>
</Copy>Statuscode festlegen
<Set source='request'>
<StatusCode>404</StatusCode>
</Set><Remove>
Entfernt angegebene HTTP-Header aus der Fehlermeldung. Wenn Sie alle Header entfernen möchten, geben Sie <Remove><Headers/></Remove> an.
| Standardwert | – |
| Erforderlich? | Optional |
| Typ | Komplexer Typ |
| Übergeordnetes Element |
<FaultResponse> |
| Untergeordnete Elemente |
<Headers> |
<Set>
Legt Informationen in der Fehlermeldung fest.
| Standardwert | – |
| Erforderlich? | Optional |
| Typ | Komplexer Typ |
| Übergeordnetes Element |
<FaultResponse> |
| Untergeordnete Elemente |
<Headers><Payload><StatusCode> |
<Payload>
Legt die Nutzlast der Fehlermeldung fest.
| Standardwert | – |
| Erforderlich? | Optional |
| Typ | String |
| Übergeordnetes Element |
<Set> |
| Untergeordnete Elemente | Keine |
Beispiele:
Textnutzlast festlegen
<Set> <Payload contentType="text/plain">test1234</Payload> </Set>
JSON-Nutzlast festlegen – 1
<Set> <Payload contentType="application/json"> {"name":"foo", "type":"bar"} </Payload> </Set>
JSON-Nutzlast festlegen – 2
<Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set>
In diesem Beispiel werden Variablen mithilfe der Attribute variablePrefix und variableSuffix mit Trennzeichen eingefügt.
JSON-Nutzlast festlegen – 3
<Set> <Payload contentType="application/json"> {"name":"foo", "type":"{variable_name}"} </Payload> </Set>
In diesem Beispiel werden Variablen mit geschweiften Klammern eingefügt. Sie können geschweifte Klammern ab Version 16.08.17 verwenden.
XML-Nutzlast festlegen
<Set> <Payload contentType="text/xml"> <root> <e1>sunday</e1> <e2>funday</e2> <e3>{var1}</e3> </Payload> </Set>
In diesem Beispiel werden Variablen mit geschweiften Klammern eingefügt. Sie können geschweifte Klammern ab Version 16.08.17 verwenden.
<IgnoreUnresolvedVariables>
Bestimmt, ob die Verarbeitung beendet wird, wenn eine nicht aufgelöste Variable erkannt wird.
Auf true festlegen, um nicht aufgelöste Variablen zu ignorieren und die Verarbeitung fortzusetzen. Andernfalls false. Der Standardwert ist true.
Das Festlegen von true für <IgnoreUnresolvedVariables> unterscheidet sich vom Festlegen von continueOnError auf true für <MonetizationLimitsCheck>. Wenn Sie true für continueOnError angeben, ignoriert Apigee alle Fehler, also nicht nur Fehler in Variablen.
Das <IgnoreUnresolvedVariables>-Element verwendet die folgende Syntax:
Syntax
<IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>
Beispiel
Im folgenden Beispiel wird für <IgnoreUnresolvedVariables> der Wert false festgelegt:
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
Fehlercodes
This section describes the fault codes and error messages that are returned and fault variables that are set by Apigee when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
| Fault code | HTTP status | Cause |
|---|---|---|
mint.service.subscription_not_found_for_developer |
500 |
This error occurs when a developer does not have a subscription to the API Product. |
mint.service.wallet_not_found_for_developer |
500 |
This error occurs when a prepaid developer attempts to consume a monetized API without maintaining a wallet for the currency specified in rate plan. |
mint.service.developer_usage_exceeds_balance |
500 |
This error occurs when a prepaid developer's usage exceeds the wallet balance. |
mint.service.wallet_blocked_due_to_inactivity |
500 |
This error occurs when a prepaid developer's wallet is not topped up in over 1.5 years and the developer attempts to consume an API. |
Fault variables
Whenever there are execution errors in a policy, Apigee generates error messages. You can view these error messages in the error response. Many a time, system generated error messages might not be relevant in the context of your product. You might want to customize the error messages based on the type of error to make the messages more meaningful.
To customize the error messages, you can use either fault rules or the RaiseFault policy. For
information about differences between fault rules and the RaiseFault policy, see
FaultRules vs. the RaiseFault policy.
You must check for conditions using the Condition element in both the fault rules and the RaiseFault policy.
Apigee provides fault variables unique to each policy and the values of the fault variables are set when a policy triggers runtime errors.
By using these variables, you can check for specific error conditions and take appropriate actions. For more information about checking error
conditions, see Building conditions.
| Variables | Where | Example |
|---|---|---|
fault.name |
The fault.name can match to any of the faults listed in the Runtime errors table.
The fault name is the last part of the fault code. |
fault.name Matches "UnresolvedVariable" |
MonetizationLimitsCheck.POLICY_NAME.failed |
POLICY_NAME is the user-specified name of the policy that threw the fault. | MonetizationLimitsCheck.monetization-limits-check-1.failed = true |
Ablaufvariablen
Die folgenden vordefinierten Flussvariablen beim Ausführen der Richtlinie „MonetizationLimitsCheck“ automatisch ausgefüllt. Weitere Informationen finden Sie unter mint-Ablaufvariablen.
| Ablaufvariable | Beschreibung |
|---|---|
mint.limitscheck.is_request_blocked |
true für blockierte Anfragen. |
mint.limitscheck.is_subscription_found |
true, wenn ein API-Abo gefunden wird |
mint.limitscheck.purchased_product_name |
Name des erworbenen API-Produkts. Beispiel: MyProduct. |
mint.limitscheck.status_message |
Statusmeldung. Folgende Werte können zurückgegeben werden:
|
mint.subscription_end_time_ms |
Ende des API-Produktabos |
mint.subscription_start_time_ms |
Beginn des API-Produktabos Beispiel: 1618433956209. |