解决定义分层API时的通配符限制

时间:2014-06-27 11:55:37

标签: apigee

假设我想创建以下API:

/movies/{movieId}/cast
/movies/{movieId}/crew
/movies/{movieId}/awards

在Apigee的最新版本中,基本URL中不再允许使用通配符。为实现上述目标,我们首先创建了 API代理 /movies。然后我们在其下面定义了三个单独的资源,每个资源以通配符开头:

/*/cast
/*/crew
/*/awards

这里有几个问题:

  1. 这是在分层API结构中定义通配符的唯一方法吗?
  2. 有没有办法将这些定义为3个独立的API代理?

1 个答案:

答案 0 :(得分:0)

假设您使用basepath / movies创建了一个API,然后使用/ movies / jaws / cast。然后,您可以创建一个PreFlow策略来提取路径变量,如下所示:

<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-URI">
    <DisplayName>Extract URI</DisplayName>
    <FaultRules/>
    <Properties/>
    <URIPath>
      <Pattern>/{movieid}/{function}</Pattern>
  </URIPath>
</ExtractVariables>

您现在有两个变量,一个用于变量,另一个用于实际服务。现在,您可以为变量 function 上的每个函数(演员,工作人员,奖励......)创建条件流,而不是匹配路径:

    <Flow name="Cast">
        <Description/>
        <Request/>
        <Response>
            <Step>
                <FaultRules/>
                <Name>Assign-cast</Name>
            </Step>
        </Response>
        <Condition>(function = "cast") and (request.verb = "GET")</Condition>
    </Flow>

您可能仍需要做一些魔术来重写目标路径,但您的请求代理路径仍然是/ jaws / cast,但现在您可以针对Jaws的强制转换请求运行特定策略。

有关条件流配置的详细信息,请参阅http://apigee.com/docs/api-services/api/conditions-referencehttp://apigee.com/docs/gateway-services/content/flow-variables-and-conditions