通过使用 IBM MobileFirst Platform Foundation HTTP 适配器,您可发送 GET 或 POST HTTP 请求并从响应标头和正文中检索数据。HTTP 适配器适用于 RESTful 和基于 SOAP 的服务,可读取 RSS 源等结构化 HTTP 来源的内容。
您可使用简单的服务器端 JavaScript 代码轻松地自定义 HTTP 适配器。例如,如有必要,您可设置服务器端过滤。被检索的数据可以是 XML、HTML、JSON 或纯文本格式。
适配器使用 XML 进行配置,以定义适配器属性和过程。也可选择使用 XSL 过滤已收到的记录和字段。
在项目的目录中,使用 mfp add adapter 并按照交互式说明操作。
Studio
在 MobileFirst Studio 中,创建一个适配器并选择 HTTP Adapter 类型。这会创建一种标准的 HTTP 适配器结构。
设置和元数据都存储在适配器 XML 文件中。您可使用 Studio 中的 Design 或 Source 编辑器,或者使用您最喜爱的 XML 编辑器来修改适配器 XML 文件。
要编辑适配器 XML 文件,您必须:
在 connectivity 元素下声明所需的过程。
点击查看代码清单
关闭 [x]
<wl:adapter name="HTTPAdapter" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wl="http://www.ibm.com/mfp/integration" xmlns:http="http://www.ibm.com/mfp/integration/http"> <displayName>HTTPAdapter</displayName> <description>HTTPAdapter</description> <connectivity> <connectionPolicy xsi:type="http:HTTPConnectionPolicyType"> <protocol>http</protocol> <domain>rss.cnn.com</domain> <port>80</port> <connectionTimeoutInMilliseconds>30000</connectionTimeoutInMilliseconds> <socketTimeoutInMilliseconds>30000</socketTimeoutInMilliseconds> <maxConcurrentConnectionsPerNode>50</maxConcurrentConnectionsPerNode> <!-- The following properties are used by the adapter's key manager for choosing specific certificate from the keystore. <sslCertificateAlias></sslCertificateAlias> <sslCertificatePassword></sslCertificatePassword> --> </connectionPolicy> </connectivity> <procedure name="getStories"/> <procedure name="getStoriesFiltered"/> </wl:adapter>
各个过程在适配器 JavaScript 文件中实现。服务 URL 用于调用过程。
该 URL 的某些部分是不变的;例如 http://example.com/。在 XML 文件中声明这些内容。URL 的其他部分可使用参数;也就是说,在运行时替换为提供给 MobileFirst 过程的参数值。
以下 URL 部分可参数化。
参阅用户文档中的“HTTP 适配器的 connectionPolicy 元素”主题,了解适配器的高级选项,如 cookie、标头和编码。
在 JavaScript 文件中,使用与 XML 文件中相同的过程名称。调用过程所需的强制参数是 method、path 和 returnedContentType。可在运行时对过程进行参数化。
function getFeeds() { var input = { method : 'get', returnedContentType : 'xml', path : "rss.xml" }; return WL.Server.invokeHttp(input); }
要调用一个 HTTP 请求,可使用 WL.Server.invokeHttp 方法。提供一个输入参数对象,它必须指定:
HTTP 方法:GET、POST、PUT、DELETE
返回的内容类型:XML、JSON、HTML 或 plain
服务 path
查询参数(可选)
请求正文(可选)
转换类型(可选)
参阅用户文档中的“WL.Server.invokeHttp”主题,查看完整的选项列表。
您可向已收到的数据应用 XSL 转换,例如过滤数据。要应用 XSL 转换,可在过程调用的输入参数中指定转换选项。
function getFeedsFiltered() { var input = { method : 'get', returnedContentType : 'xml', path : "rss.xml", transformation : { type : 'xslFile', xslFile : 'filtered.xsl' } }; return WL.Server.invokeHttp(input); }
您可使用 WL.Server.invokeHttp 方法创建一个 SOAP 信封(envelope),并且可直接发送该信封。
要在 HTTP 适配器中调用基于 SOAP 的服务,必须将 SOAP XML 信封编码到请求正文中。将 XML 编码到 JavaScript 中很简单:只需使用 E4X,这是官方规定的 JavaScript 1.6 部分。您可使用此技术编码任何类型的 XML 文档,而不仅仅是 SOAP 信封。
如果收到有关 SOAP 信封的错误消息,可禁用 JavaScript 验证程序。单击 Project > Properties > Builders 并取消选中 JavaScript Validator。
使用 JavaScript 创建一个 SOAP 信封。可以将 JavaScript 代码和变量插入到 SOAP XML 中。在运行时会评估这些附加代码。
点击查看代码清单
关闭 [x]
var request = <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <CelsiusToFahrenheit xmlns="http://www.w3schools.com/webservices/"> <Celsius>{celsiusTemp}</Celsius> </CelsiusToFahrenheit> </soap:Body> </soap:Envelope>;
WL.Server.invokeHttp(options) 方法用于调用一个 SOAP 服务请求。
Options 对象必须包含以下属性:
var input = { method: 'post', returnedContentType: 'xml', path: '/webservices/tempconvert.asmx', body: { content: request.toString(), contentType: 'text/xml; charset=utf-8', }, }; var result = WL.Server.invokeHttp(input);
使用 MobileFirst Studio,您可通过 Discover Back-end Services 工具来从以下服务自动生成适配器,从而缩短开发时间:
添加要使用的服务位置,并选择您要将哪个服务添加到适配器。
对要添加的每个服务重复此过程。这些服务将添加到同一个适配器中。
有关更多信息,请参阅用户文档中使用服务发现向导生成适配器的主题。
单击下载该 Studio 项目。