IBM Cloud Functions Calling API with authentication / node.js

IBM Cloud Functions Calling API with authentication / node.js

对于大多数阅读本文的人来说,这是最基本的问题,并在 2 分钟内完成.. 也许有人有时间为我提供代码,或者可以推荐一个资源,其中为绝对初学者解释了这一点。

我想从需要身份验证的 IBM 云函数调用 API。

我从 IBM 视频教程中获得了这段代码,我可以调用任何打开的 API:

let rp = require('request-promise')
  
function main(params) {
    if (params.actionA == 'joke') {
         const options = {
       uri: "http://api.icndb.com/jokes/random",
       json: true
       }
    return rp(options)
    .then(res => {
       return { response: res }
     })
} else if (params.actionB == 'fact') {
        const options = {
    uri: "https://catfact.ninja/fact",
    json: true
    }
return rp(options)
.then(res => {
        return { response: res }
})
}
} 

我想保留这个笑话 API 但想用这句励志名言 API 来交换猫的事实 API(需要验证):https://english.api.rakuten.net/HealThruWords/api/universal-inspirational-quotes/details

我可以从乐天获得这个 node.js 代码来调用引用 api。

var http = require("https");

var options = {
    "method": "GET",
    "hostname": "healthruwords.p.rapidapi.com",
    "port": null,
    "path": "/v1/quotes/?id=731&t=Wisdom&maxR=1&size=medium",
    "headers": {
        "x-rapidapi-host": "healthruwords.p.rapidapi.com",
        "x-rapidapi-key": "api key here",
        "useQueryString": true
    }
};

var req = http.request(options, function (res) {
    var chunks = [];

    res.on("data", function (chunk) {
        chunks.push(chunk);
    });

    res.on("end", function () {
        var body = Buffer.concat(chunks);
        console.log(body.toString());
    });
});

req.end();

如何将它合并到 if 函数中?我想将该功能与 watson assistant 一起使用,它适用于当前代码。我只需要通过引用 api.

交换的 catfact api

您提供的两个代码片段使用不同的模块来执行 http 请求。这可能就是它看起来有点复杂的原因。

按照您描述的方式更改行为的第一步是用您第二个代码片段中的选项替换 else 分支中的完整选项。

第二步是为引用 URL 提供必要的 api 键作为函数的参数。

在向函数添加附加参数 apiKey 后,您能否尝试下面的代码片段。我没有测试下面的代码,但我会这样做。如果它对您有用,请告诉我,我可以根据您的反馈改进答案。

let rp = require('request-promise')

function main(params) {
    if (params.actionA == 'joke') {
        const options = {
            uri: "http://api.icndb.com/jokes/random",
            json: true
        }
        return rp(options)
            .then(res => {
                return { response: res }
            })
    } else if (params.actionB == 'fact') {
        const options = {
            "method": "GET",
            "hostname": "healthruwords.p.rapidapi.com",
            "port": null,
            "uri": "/v1/quotes/?id=731&t=Wisdom&maxR=1&size=medium",
            "headers": {
                "x-rapidapi-host": "healthruwords.p.rapidapi.com",
                "x-rapidapi-key": params.apiKey,
                "useQueryString": true
            }
        }
        return rp(options)
            .then(res => {
                return { response: res }
            })
    }
}