在Apigee中引发自定义错误

时间:2014-01-14 16:53:33

标签: exception apigee

我想在验证apikey的同时在apigee边缘引发错误。这是正确的方法吗?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<GetOAuthV1Info enabled="true" continueOnError="false" async="false" name="ValidateAPIKey">
    <DisplayName>Validate API Key Policy</DisplayName>

    <FaultRules>
      <FaultRule>
        <Description>InvalidApiKey</Description>
        <Condition>(flow.param.apikey)=NULL</Condition>
      </FaultRule>

    </FaultRules>

    <Properties/>
    <AppKey ref="flow.param.apikey"/>
</GetOAuthV1Info>

4 个答案:

答案 0 :(得分:2)

如果密钥为null或未通过,VerifyApiKey策略(或GetOAuthV1Info策略)本身将引发错误。无需明确调用RaiseFault

典型的VerifyApiKey用法如下:

<VerifyAPIKey enabled='true' name='VerifyKey-1'>
  <DisplayName>Verify API Key</DisplayName>
  <APIKey ref='request.queryparam.apikey'></APIKey>
</VerifyAPIKey>

如果您想在运行该策略之前对apikey的存在进行抢先检查,那么您可以添加这样的流程步骤

<Request>
  <Step>
    <Condition>(request.queryparam.key=null) or (request.queryparam.key=EMPTY)</Condition>
    <Name>RaiseFault-key_not_found</Name>
  </Step>
  <Step>
    <Name>VerifyKey-1</Name>
  </Step>
</Request>

RaiseFault-key_not_foundRaiseFault政策,如下所示:

<RaiseFault name="RaiseFault-key_not_found">
  <FaultResponse>
    <Set>
      <Payload contentType="application/xml">
        <consumer>
          <error>
            <message>Key doesn't Exists</message>
          </error>
        </consumer>
      </Payload>
    </Set>
  </FaultResponse>
</RaiseFault>

当然,如果您愿意,有效负载可以是JSON或纯文本或其他内容。

答案 1 :(得分:1)

我认为处理策略的故障现在已经改变了一点。但尚未在政策模式或Apigee docs

中正确反映出来

在策略/步骤定义中定义故障规则现在不起作用。 您必须将故障规则定义为流前或后流等流程,并在其中包含故障定义。如下图所示..

<ProxyEndpoint name="default"> 
<Description/> 
<FaultRules> 
<FaultRule name="InvalidApiKeyXml"> 
<Condition>fault.name == &quot;InvalidApiKey&quot;</Condition> 
<Step> 
<Name>invalidAccessForXML</Name> <!-- step to call on fault could be a raise fault or assignmessage policy --> 
</Step> 
</FaultRule> 
</FaultRules>
... 
</Flows> 
... 
</ProxyEndpoint>

并且不在您的使用范围内的政策范围内:     验证API密钥策略

<FaultRules>
  <FaultRule>
    <Description>InvalidApiKey</Description>
    <Condition>(flow.param.apikey)=NULL</Condition>
  </FaultRule>

</FaultRules>

<Properties/>
<AppKey ref="flow.param.apikey"/>

答案 2 :(得分:0)

你的错误规则看起来像这样

 <FaultRule>
    <Name>InvalidApiKey</Description>
    <Condition>(fault.name = oauth.v2.InvalidApiKey)</Condition>
</FaultRule>

Name元素引用一个策略,通常是AssignMessage策略,它为错误条件创建响应消息。

Condition元素定义将触发策略的条件。每个策略都定义了一个错误代码列表,您可以将其用作fault.name变量。

您可以在此处阅读有关故障处理的更多信息:

http://apigee.com/docs/api-services/content/fault-handling

答案 3 :(得分:0)

如果您想为缺少的API密钥处理错误,那么错误代码就是:

{ “错误代码”: “steps.oauth.v2.FailedToResolveAPIKey”}

您可能想要使用API​​密钥示例,同时掌握它:

https://github.com/apigee/api-platform-samples/tree/master/sample-proxies/apikey