通常呼叫GET HTTP method的RESTful API會取得API查詢的回傳物件,在Biztalk 2013內要怎麼接收呢?
例如,我寫了一個ASP.NET WebAPI,會依據所Request的Employee ID回傳Employee
物件。Employee
物件的定義如下:
public class Employee
{
public string EmpName { get; set; }
public string EmployeeID { get; set; }
}
在Biztalk中該怎麼做才能呼叫該Web API以取得Employee
物件呢?在Biztalk專案中,要注意的
設定WCF-WebHttp Adapter
設定方式可以參考使用WCF-WebHttp Adapter呼叫Web API。其中要注意到的是,在Message頁籤中,Outbound Message區塊,要把GET
寫上。以免Orchestration透過Send
物件呼叫API時,帶入Message物件,卻導致Web API端無法辨識所需叫用的method。
建立回傳物件的XML Schema
以Employee
物件來說,透過WCF-WebHttp Adapter呼叫Web API,回傳的訊息內容會長類似這個樣子。主要是Namespace會依據Web API專案中的Project
及Controller
而組成。
<Employee xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/LabRestful.Controllers">
<EmpName>Employee A</EmpName>
<EmployeeID>a456</EmployeeID>
</Employee>
所以,我們就要依據此XML設計對應的XML Schema。要注意的是,Target Namespace
要記得跟XML的一樣,在這裡也就是"http://schemas.datacontract.org/2004/07/LabRestful.Controllers"
<?xml version="1.0" encoding="utf-16" ?>
<xs:schema xmlns="http://schemas.datacontract.org/2004/07/LabRestful.Controllers" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://schemas.datacontract.org/2004/07/LabRestful.Controllers" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Employee">
<xs:complexType>
<xs:sequence>
<xs:element name="EmpName" type="xs:string" />
<xs:element name="EmployeeID" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
建立RortType
因為我們所呼叫的Web API有回傳物件,我們需要接收以處理它,所以應該要建立Request-Response Port Type。
透過WCF-WebHttp Adapter回傳的是帶有Emeployee型別定義的XML,所以我們可以用將回傳的Message Type
設定為我們之前所建立的XML Schema定義的XSD檔。
設定實體的Send Port
以上都規畫並設定好之後,即可Deploy至Biztalk上,並進行Port的設定。在呼叫Web API的Send Port上,由於是接收序列化成XML的Message,所以Receive pipeline要選擇XML Receive
。
以上就是呼叫Web API所需注意的處理方式。