本頁適用於 Apigee 和 Apigee Hybrid。
查看
Apigee Edge 說明文件。
總覽
您可以透過 MonetizationLimitsCheck 政策強制執行營利限制。
具體來說,如果應用程式開發人員存取營利 API 時,未購買相關 API 產品的訂閱項目,或是開發人員的餘額不足,系統就會觸發這項政策。在這種情況下,「營利限制檢查」政策會觸發錯誤,並封鎖 API 呼叫。詳情請參閱「強制開發人員訂閱 API 產品」。
將 MonetizationLimitsCheck 政策套用至 API 代理程式時,系統會填入 mint.limitscheck.*
和 mint.subscription_*
流程變數,如 mint 流程變數參考資料所述。
這項政策是可擴充的政策,視您的 Apigee 授權而定,使用這項政策可能會產生費用或使用量影響。如要瞭解政策類型和使用相關性,請參閱「政策類型」。
<MonetizationLimitsCheck>
定義 MonetizationLimitsCheck 政策。
預設值 | 不適用 |
是否必要? | 必填 |
類型 | 複雜類型 |
上層元素 | N/A |
子元素 |
<DisplayName> <FaultResponse> <IgnoreUnresolvedVariables> |
下表概略說明 <MonetizationLimitsCheck>
的子元素:
子元素 | 是否必要 | 說明 |
---|---|---|
<DisplayName> |
選用 | 政策的自訂名稱。 |
<FaultResponse> |
選用 | 定義傳回給要求用戶端的回應訊息。 |
<IgnoreUnresolvedVariables> |
選用 | 忽略流程中未解決的變數錯誤。 |
<MonetizationLimitsCheck>
元素使用以下語法:
語法
<?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>
範例
在以下範例中,如果開發人員未購買相關 API 產品的訂閱方案,就無法存取已營利的 API,系統會傳回 403
狀態,並顯示自訂訊息。
<?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>
這個元素包含下列所有政策都適用的屬性:
屬性 | 預設 | 是否必要? | 說明 |
---|---|---|---|
name |
不適用 | 必要 |
政策的內部名稱。 您可以選擇使用 |
continueOnError |
false | 選用 | 將其設為 false ,即可在政策失敗時傳回錯誤。這是大多數政策的預期行為。將其設為 true ,即使政策失敗,流程執行作業仍會繼續進行。另請參閱:
|
enabled |
是 | 選用 | 設為 true 即可強制執行政策。設為 false 即可關閉政策。即使政策仍附加至流程,系統也不會強制執行這項政策。 |
async |
false | 已淘汰 | 此屬性已淘汰。 |
子元素參照
本節將說明<MonetizationLimitsCheck>
的子元素。
<DisplayName>
除了 name
屬性之外,您也可以在管理 UI 代理程式編輯器中使用其他更自然的名稱標記政策。
<DisplayName>
元素適用於所有政策。
預設值 | 不適用 |
是否必要? | (非必要) 如果省略 <DisplayName> ,系統會使用政策的 name 屬性值。 |
類型 | 字串 |
上層元素 | <PolicyElement> |
子元素 | 無 |
<DisplayName>
元素使用以下語法:
語法
<PolicyElement> <DisplayName>POLICY_DISPLAY_NAME</DisplayName> ... </PolicyElement>
範例
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
<DisplayName>
元素沒有屬性或子項元素。
<FaultResponse>
定義傳回給要求用戶端的回應訊息。FaultResponse 使用的設定與 RaiseFault 政策中的 <FaultResponse
> 元素相同。
預設值 | 不適用 |
是否必要? | 選用 |
類型 | 複雜類型 |
上層元素 |
<MonetizationLimitsCheck> |
子元素 |
<AssignVariable> <Add> <Copy> <Remove> <Set> |
<AssignVariable>
將值指派給目的地流程變數。如果流程變數不存在,AssignVariable
會建立該變數。
預設值 | 不適用 |
是否必要? | 選用 |
類型 | 複雜類型 |
上層元素 |
<FaultResponse> |
子元素 |
<Name> <Value> |
舉例來說,您可以使用以下程式碼,在「營利限制檢查」政策中設定名為 myFaultVar
的變數:
<FaultResponse> <AssignVariable> <Name>myFaultVar</Name> <Value>42</Value> </AssignVariable> </FaultResponse>
錯誤規則中的政策就能存取該變數。舉例來說,下列 AssignMessage 政策會使用變數在錯誤回應中設定標頭:
<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>
使用與 AssignMessage 政策中的 <AssignVariable>
元素相同的語法。
<Name>
變數名稱。詳情請參閱「AssignMessage」政策中的「Name」元素。
預設值 | 不適用 |
是否必要? | 選用 |
類型 | 字串 |
上層元素 |
<AssignVariable> |
子元素 | 無 |
<Value>
變數值。詳情請參閱「AssignMessage」政策中的「Value」元素。
預設值 | 不適用 |
是否必要? | 選用 |
類型 | 字串 |
上層元素 |
<AssignVariable> |
子元素 | 無 |
<Add>
將 HTTP 標頭新增至錯誤訊息。
預設值 | 不適用 |
是否必要? | 選用 |
類型 | 複雜類型 |
上層元素 |
<FaultResponse> |
子元素 |
<Headers> |
<Headers>
指定要新增、設定、複製或移除的 HTTP 標頭。
預設值 | 不適用 |
是否必要? | 選用 |
類型 | 複雜類型 |
上層元素 |
<Add> <Copy> <Remove> <Set> |
子元素 | 無 |
範例:
新增標頭
以下範例會將 request.user.agent
流程變數的值複製到標頭中:
<Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add>
設定標頭
以下範例會將 user-agent
標頭設為使用 <AssignTo>
元素指定的訊息變數。
<Set> <Headers> <Header name="user-agent">{request.header.user-agent}</Header> </Headers> </Set>
複製標頭 - 1
以下範例會從要求中複製 headerA
:
<Copy source='request'> <Headers> <Header name="headerA"/> </Headers> </Copy>
複製標頭 - 2
以下範例會複製多個標頭:
<Copy source='request'> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Copy>
這個範例會複製「h1」、「h2」和「h3」的第二個值。如果「h3」只有一個值,則不會複製「h3」。
移除頁首 - 1
以下範例會移除標頭:
<Remove> <Headers> <Header name="user-agent"/> </Headers> </Remove>
移除頁首 - 2
以下範例會移除多個標頭:
<Remove> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Remove>
這個範例會移除「h1」、「h2」和「h3」的第二個值。如果「h3」只有一個值,則不會移除「h3」。
<Copy>
將 source
屬性指定的訊息複製到錯誤訊息中。
預設值 | 不適用 |
是否必要? | 選用 |
類型 | 複雜類型 |
上層元素 |
<FaultResponse> |
子元素 |
<Headers> <StatusCode> |
下表說明 <Copy>
的屬性:
屬性 | 是否必要 | 類型 | 說明 |
---|---|---|---|
來源 | 選用 | 字串 |
指定複本的來源物件。
|
<StatusCode>
在錯誤訊息中指定 HTTP 狀態碼。您可以為 source
屬性指定的物件複製或設定值。
預設值 | 不適用 |
是否必要? | 選用 |
類型 | 複雜類型 |
上層元素 |
<Copy> <Set> |
子元素 | 無 |
範例:
複製狀態碼
<Copy source='response'> <StatusCode>404</StatusCode> </Copy>
設定狀態碼
<Set source='request'> <StatusCode>404</StatusCode> </Set>
<Remove>
從錯誤訊息中移除指定的 HTTP 標頭。如要移除所有標頭,請指定 <Remove><Headers/></Remove>
。
預設值 | 不適用 |
是否必要? | 選用 |
類型 | 複雜類型 |
上層元素 |
<FaultResponse> |
子元素 |
<Headers> |
<Set>
設定錯誤訊息中的資訊。
預設值 | 不適用 |
是否必要? | 選用 |
類型 | 複雜類型 |
上層元素 |
<FaultResponse> |
子元素 |
<Headers> <Payload> <StatusCode> |
<Payload>
設定錯誤訊息的酬載。
預設值 | 不適用 |
是否必要? | 選用 |
類型 | 字串 |
上層元素 |
<Set> |
子元素 | 無 |
範例:
設定文字酬載
<Set> <Payload contentType="text/plain">test1234</Payload> </Set>
設定 JSON 酬載 - 1
<Set> <Payload contentType="application/json"> {"name":"foo", "type":"bar"} </Payload> </Set>
設定 JSON 酬載 - 2
<Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set>
這個範例使用 variablePrefix
和 variableSuffix
屬性,搭配分隔符字元插入變數。
設定 JSON 酬載 - 3
<Set> <Payload contentType="application/json"> {"name":"foo", "type":"{variable_name}"} </Payload> </Set>
本範例會使用大括號插入變數。您可以從 16.08.17 版開始使用大括號。
設定 XML 酬載
<Set> <Payload contentType="text/xml"> <root> <e1>sunday</e1> <e2>funday</e2> <e3>{var1}</e3> </Payload> </Set>
本範例會使用大括號插入變數。您可以從 16.08.17 版本開始使用大括號。
<IgnoreUnresolvedVariables>
判斷遇到未解析的變數時是否停止處理。
將其設為 true
可忽略未解析的變數並繼續處理;否則為 false
。預設值為 true
。
將 <IgnoreUnresolvedVariables>
設為 true
與將 <MonetizationLimitsCheck>
的 continueOnError
設為 true
不同。如果將 continueOnError
設為 true
,Apigee 會忽略所有錯誤,而非只忽略變數中的錯誤。
<IgnoreUnresolvedVariables>
元素使用以下語法:
語法
<IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>
範例
以下範例將 <IgnoreUnresolvedVariables>
設為 false
:
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
錯誤代碼
本節說明這項政策觸發錯誤時,Apigee 傳回的錯誤代碼和錯誤訊息,以及 Apigee 設定的錯誤變數。如果您要開發錯誤處理規則,就必須瞭解這項資訊。如需更多資訊,請參閱「關於政策錯誤的相關資訊」和「處理錯誤」。
執行階段錯誤
政策執行時可能會發生這些錯誤。
錯誤代碼 | HTTP 狀態 | 原因 |
---|---|---|
mint.service.subscription_not_found_for_developer |
500 |
開發人員未訂閱 API 產品時,就會發生這項錯誤。 |
mint.service.wallet_not_found_for_developer |
500 |
如果預付款開發人員嘗試使用已啟用營利功能的 API,但未為費率方案中指定的貨幣維護錢包,就會發生此錯誤。 |
mint.service.developer_usage_exceeds_balance |
500 |
如果預付款開發人員的使用金額超過錢包餘額,就會發生這項錯誤。 |
mint.service.wallet_blocked_due_to_inactivity |
500 |
如果預付款開發人員的錢包在 1.5 年內未補充,且開發人員嘗試使用 API,就會發生這項錯誤。 |
錯誤變數
每當政策發生執行錯誤時,Apigee 就會產生錯誤訊息。您可以在錯誤回應中查看這些錯誤訊息。很多時候,系統產生的錯誤訊息在產品情境中可能不相關。您可能會根據錯誤類型自訂錯誤訊息,讓訊息更有意義。
如要自訂錯誤訊息,您可以使用錯誤規則或 RaiseFault 政策。如要瞭解錯誤規則與 RaiseFault 政策的差異,請參閱「FaultRules 與 RaiseFault 政策」。您必須在錯誤規則和 RaiseFault 政策中,使用 Condition
元素檢查條件。Apigee 會提供每項政策專屬的錯誤變數,而錯誤變數的值會在政策觸發執行階段錯誤時設定。您可以使用這些變數,檢查特定錯誤情況並採取適當行動。如要進一步瞭解如何檢查錯誤條件,請參閱「建構條件」。
變數 | 地點 | 範例 |
---|---|---|
fault.name |
fault.name 可與「執行階段錯誤」表格中列出的任何錯誤相符。
錯誤名稱是錯誤代碼的最後一個部分。 |
fault.name Matches "UnresolvedVariable" |
MonetizationLimitsCheck.POLICY_NAME.failed |
POLICY_NAME 是擲回錯誤的政策的使用者指定名稱。 | MonetizationLimitsCheck.monetization-limits-check-1.failed = true |
流程變數
執行「營利限制檢查」政策時,系統會自動填入下列預先定義的流程變數。詳情請參閱mint 流程變數。
流程變數 | 說明 |
---|---|
mint.limitscheck.is_request_blocked |
true 代表已封鎖的要求。 |
mint.limitscheck.is_subscription_found |
true (如果找到 API 訂閱項目)。 |
mint.limitscheck.purchased_product_name |
購買的 API 產品名稱。例如 MyProduct 。 |
mint.limitscheck.status_message |
狀態訊息。例如 limits_check_success 。 |
mint.subscription_end_time_ms |
API 產品訂閱項目的結束時間。 |
mint.subscription_start_time_ms |
API 產品訂閱的開始時間。例如 1618433956209 。 |