这很简单。我需要Apigee服务标注(SC)中的<URL>
元素作为动态元素。
例如:<URL>http://{dynamicURL}</URL>
在运行时确定dynamicURL
,并且每个请求的值都不同。它将具有完整的目标URL,例如(ip:port / abc / orderid / 1234)
<HTTPTargetConnection>
<Properties />
<URL>http://{dynamicURL}</URL>
</HTTPTargetConnection>
试过这些:
在JS政策中,尝试在上下文中设置servicecallout.{scpolicyname}.target.url
。在这种情况下,只会发送动态ip:port
。缺少URI /abc/orderid/1234
。
在AssignMessage
政策中,创建了一个标题并尝试在SC网址元素中使用它,例如request.header.name,{request.header.name},前面是$。
在AssignMessage
政策中,创建了一个变量&amp;尝试在SC中使用它,例如{dynamicURL}
,前面有$
。
这是一个常见的用例,我确信必须有一个简单的方法。需要你的帮助。
谢谢,
Somu
答案 0 :(得分:1)
您可以结合使用ServiceCallout和AssignMessage策略。
您可以在ServiceCallout政策中设置ip:port
。正如您所指出的那样,在<URL>http://{dynamicURL}</URL>
的元素<HTTPTargetConnection>
中设置此项。
对于URI的其余部分,您可以使用AssignMessage策略<Path>
元素。这是一个例子:
<AssignMessage enabled="true" continueOnError="false" async="false" name="GenerateAuthorizationPayload">
<FaultRules/>
<Properties/>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<AssignTo createNew="true" type="request"/>
<Set>
<Payload contentType="text/xml">
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="urn:sample">
<soapenv:Header/>
<soapenv:Body>
<v1:Login/>
</soapenv:Body>
</soapenv:Envelope>
</Payload>
<Path>/abc/orderid/1234</Path>
<Verb>POST</Verb>
</Set>
</AssignMessage>
如果您需要灵活性,您还应该能够在{variable}
代码中添加<Path>
。
这两项政策的结合使您获得动态ip:port/path
。
答案 1 :(得分:0)
考虑使用目标服务器。它更清洁,它们专为您刚才描述的目的而设计。 this answer中的更多详细信息。