首页 > 解决方案 > 如何将 PubSub Rest API 与 Google 服务帐户一起使用?

问题描述

无论如何,我们可以使用 Google 服务帐户调用 Google PubSub Rest API 吗?

我有一个非常具体的要求,即使用 rest api 在 pub sub 上发布消息,让我知道有什么办法可以做到吗?

如果有一种方法可以使用也有帮助的服务帐户获取所需的 Api Key 或用于 rest api 的令牌。

标签: restgoogle-cloud-pubsub

解决方案


如果你想直接使用 API,没有客户端库,你可以这样做

首先,获取access_token然后将其添加到请求的标头中

    const {GoogleAuth} = require('google-auth-library');
    const auth = new GoogleAuth()
    const adc = await auth.getApplicationDefault()
    const access_token = await adc.credential.getAccessToken();
    console.log(access_token.token)

    const request = require('request');

    const topic = 'projects/gbl-imt-homerider-basguillaueb/topics/go-hello'

    const options = {
        url: ' https://pubsub.googleapis.com/v1/' + topic + ':publish',
        method: 'POST',
        headers: {
            'Authorization': 'Bearer ' + access_token.token,
            'Content-type': 'application/json'
        },
        body:'{"messages":[{"data":"' + Buffer.from("Hello World").toString('base64') + '"}]}'
    };

    request(options, function(err, res, body) {
        let json = JSON.parse(body);
        console.log(json);
    });

编辑

遗憾的是,我在 Nodejs 中太糟糕了,无法为此编写干净的代码。您可以转到文档页面,您可以看到类的构造函数选项GoogleAuth

最后,这样的事情应该可以工作(但我没有做到这一点......太糟糕了......)

const auth = new GoogleAuth({
    scopes: '',
    keyFile: 'path/to/key.json'
})

因为我很糟糕,所以我正在这样做并且它有效

//Set manually the environment variables
process.env.GOOGLE_APPLICATION_CREDENTIALS='path/to/key.json'
const auth = new GoogleAuth() //Use default credentials

推荐阅读