我創建在WSO2碳(5.0)的API,其餘POST的有效載荷聚合至不同JSON數據:WSO2 - 轉化和從多個端點
{ "IdNumber" : "8008185218088", "LastName" : null }
然後調用發起克隆介體序列將該有效負載轉發給兩個不同的REST端點。從端點JSON響應是不同的:
端點1響應:
{ "Name" : "Daniel", "Number" : "12345678" }
端點2響應:
{ "Name": "Bob", "Address": "200 Bob Street", "Code": "123" }
的API響應我想基於創建以上:
{
"Endpoint 1 Response" : {
"Name" : "Daniel",
"Number" : "12345678"
},
"Endpoint 2 Response" : {
"Name": "Bob",
"Address": "200 Bob Street",
"Code": "123"
}
}
outSequence
需要配置什麼介質才能實現此目的?我將如何查詢單個json響應字段並將它們合併到客戶端的自定義格式化json消息中?
我已經看過了Aggregate mediator,但我不認爲它適用於格式不同的消息。
這裏是我的參考inSequence中:
<resource methods="POST">
<inSequence>
<property name="ROOT" scope="default">
<root:rootelement xmlns:root="www.wso2esb.com"/>
</property>
<log level="full"/>
<clone continueParent="true" id="test" sequential="true">
<target>
<sequence>
<send>
<endpoint>
<address uri="http://192.168.1.1/api/service/person" format="rest"/>
</endpoint>
</send>
</sequence>
</target>
<target>
<sequence>
<send>
<endpoint>
<address uri="http://192.168.1.1/api2/query" format="rest"/>
</endpoint>
</send>
</sequence>
</target>
</clone>
</inSequence>
看起來像一個很好的解決方案,只是幾個問題。爲什麼在第一個調解員中使用呼叫,然後在第二個調解員中發送?另外,如果第二個端點響應中的字段名稱相同,例如我的「Name」json字段,如何區分第一個調用中字段的屬性? –
嗨丹尼爾,通常一個代理服務器通過序列使用'發送'和響應通過使用發送outsequence傳遞請求。在這種情況下,你想要做2個請求,所以額外的一個是使用'call'完成的。要回答第二個問題:中介始終在「消息上下文」上運行,這意味着當前正在處理的消息。因此,在通話之後,您將根據第一個api通話的響應進行操作,並且在發送後(通過後面的操作),您將操作第二個api通話的響應。 – Jan
感謝Jan.我遇到了使用您的解決方案的問題,outSequence似乎在收到來自第二個端點的響應之前正在執行。另外,我不確定如何處理兩個屬性使用相同表達式(因爲兩個響應具有相同字段名稱)但具有不同值的情況。如何確保在執行outSequence之前收到兩個響應,以及如何爲2個不同的響應定義具有相同表達式的2個屬性? –