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

How can I send data to Presence Insights connectors API via Swagger or Ajax?

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 如何声明 post 请求的主体?有什么方法可以访问 swagger.json 状态洞察(这东西会解决我所有的问题)?

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

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

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

现在,仔细查看了一下,我确实看到 swagger 定义实际上可用于此服务:

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

将其放入客户端后,从技术上讲,您就可以对服务器进行调用。

但是,此服务存在问题。 swagger 定义看起来无效,因此无法使用 javascript 客户端。例如:

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

显示很多错误。我可能错误地使用了此服务中的 swagger.json(我确实嗅出了它),但我指出——在构建客户端时使用定义——是这个库的工作原理。