如何通过Swagger或Ajax将数据发送到Presence Insights连接器API?

时间:2016-02-05 09:28:00

标签: javascript ajax ibm-cloud swagger presenceinsights

更新2016年2月19日 - 见下文

我正在构建用于邻近营销的混合移动应用程序(即将与信标交互的移动应用程序),并且我想使用Bluemix Presence Insights服务来收集数据。问题是我无法通过SDK连接,因为它是一个混合应用程序,因此我需要使用connectors API。我做了一些尝试,我仍然得到了401响应。

我试过Ajax call setting the Basic Autentication Headers

beforeSend: function (xhr) {
    xhr.setRequestHeader ("Authorization", "Basic " + btoa(username + ":" + password));
},

beforeSend: function (xhr) {
    xhr.setRequestHeader ("Authorization", "Basic <my encrypted token>");
},

headers: {
    "Authorization": "Basic " + btoa(USERNAME + ":" + PASSWORD)
  },

(还有加密的令牌,我不会重写它)。

然后我创建了一个Node.js服务器并安装了swagger-client(即我改变了策略):

router.post('/', function (req, res, next) {
    var json = req.body.json;
    var client = new Swagger({
        url: 'https://presenceinsights.ibmcloud.com/pi-swagger/the-connector-api',
        success: function () {
            console.log("success");
            console.log(JSON.stringify(client));
        },
        authorizations : {
            easyapi_basic: new Swagger.PasswordAuthorization('username', 'password')
        }

    });

    res.end();
});

这次我取得了进步:

我可以成功连接,但我无法发送带有数据的JSON。无法访问swagger.json如何声明帖子请求的正文?有没有办法访问swagger.json在线见解(这件事会解决我的所有问题)?

更新 在与Presence Insights支持交换信息后,我可以说调用Swagger客户端是不可行的。这是将服务与混合应用程序一起使用的唯一方法,它正在构建一个代理Blumix运行时,它将数据从混合应用程序转发到Presence Insights服务。由于CORS策略不允许,因此不允许使用外部服务器或通过在应用程序内调用API进行任何其他尝试。 这适用于连接器和管理。

我写这篇文章以供将来参考。

1 个答案:

答案 0 :(得分:1)

您要放置的端点网址需要是swagger定义或swagger规范的位置。加载后,您可以调用API。请注意,您正在初始化的swagger客户端将根据该定义动态创建函数。

现在,稍微捅一下,我确实看到这个服务实际上可以使用swagger定义:

https://presenceinsights.ibmcloud.com/pi-swagger/swagger.json

一旦你把它放在客户端,那么你可以从技术上对服务器进行调用。

但是,此服务存在问题。昂首阔步的定义看起来并不合适,因此不可能使用javascript客户端。例如:

https://online.swagger.io/validator/debug?url=https://presenceinsights.ibmcloud.com/pi-swagger/swagger.json

显示许多错误。我可能错误地使用了来自这个服务的swagger.json(我确实嗅了出来)但是我指出的 - 在构造客户端时使用定义 - 这个库是如何工作的。