简短版。 我正在尝试创建一个将处理
的API/goals/risks
/goals/types
/goals/{goalID}
到目前为止,这是我所拥有的,但它并不是我想要的。因为它给了我/目标/目标/ {goalId}
<api xmlns="http://ws.apache.org/ns/synapse" name="GoalAPI" context="/goals">
<resource methods="GET" uri-template="/risks" faultSequence="ReturnError">...</resource>
<resource methods="GET" uri-template="/types" faultSequence="ReturnError">...</resource>
<resource methods="GET" uri-template="/goal/{goalId}" faultSequence="ReturnError">...</resource>
</api>
GoalID将始终与/^\d+$/
匹配,因此,如果我可以通过它以某种方式路由它将起作用。最后我还想添加/goals/{goalID}/item and /goals/{goalID}/items/{itemID}
,但我相信一旦我找到第一步就会很容易。
如果这里没办法做到这一点,有没有办法可以在wso2到达资源之前重写内部的url然后我可以用/goals/(\d+.*)
替换/goals/goal/$1?
我知道我可以通过代理路由它并用apache或其他东西重写它,但这似乎打败了WSO2的目的。
答案 0 :(得分:0)
因此,在调查了这个没有成功并且没有得到任何回应之后,我只是盯着代码可以想出......
<api xmlns="http://ws.apache.org/ns/synapse" name="GoalAPI" context="/goals">
<resource methods="GET" uri-template="/{goalID}" faultSequence="ReturnError">
<inSequence>
<switch source="get-property('uri.var.goalId')">
<case regex="risks">...</case>
<case regex="types">...</case>
<default>...Handle the ID here...</default>
</switch>
</inSequence>
...
</resource>
</api>