我在IBM Bluemix上有一个帐户。外部数据提供者将允许我访问他们的一个Web服务,这些服务在被调用时将异步地获取数据。如何调用Web服务并捕获数据?
答案 0 :(得分:2)
您说Web服务是异步的,但在Web应用程序的上下文中,服务更可能是同步的,但是它是异步访问的。最有可能的是,例如通过AJAX调用该服务。调用该服务,然后继续执行。当响应进入时,异步执行成功或失败函数(回调)。 如果the service itself是异步的,那么您必须基于某些队列逻辑(或消息驱动的bean或其他)开发更复杂的客户端。 上述两种情况都需要您开发一个调用Web服务并处理其响应的应用程序。
您可以使用Runtimes或Boilerplates。
执行此操作还有API Connect服务,允许(在其他功能中)import API定义,以及test来自API Designer测试工具的服务。但是,如果您需要使用数据并在其上执行某些逻辑,则需要一个如上所述的应用程序。
答案 1 :(得分:0)
您应该可以使用上面提到的AJAX调用使用任何语言调用url。如果返回类型是JSON,那么任何语言也应该能够从AJAX调用中获取结果。
这是我用来从我的Bluemix应用程序获取数据的node.js方法:
/*
* url: http or https web address that accepts POST..or GET
* callbackFunc: pass the name of a callback function that is in the same scope of makeAjaxCall(). you can pass NULL
* obj: the POST parameters. I use a JSON object
* callbackParams: any parameters you want to pass to your callback function. can be NULL.
*/
function makeAjaxCall(url, callbackFunc, obj, callbackParams) {
var _data = (!isNull(obj)) ? obj : null;
if (!isNull(_data)) {
$.ajax({
url: url,
//dataType: "json",
type: "POST",
data: _data,
success: function (res) {
callbackFunc(jsonStr);
},
error: function (err) {
if (err.status == 500) {
showNotification(err.responseText);
}
showBusy(false);
}
});
}
}
function isNull(inVar) {
if (typeof (inVar) == 'undefined') {
return true;
}
else if (typeof (inVar) == 'string') {
if (inVar == '') {
return true;
}
}
else if (typeof (invar) == 'int') {
if (inVar < 1) {
return true;
}
}
else if (inVar == null) {
return true;
}
return false;
}