LoginSignup
0
0

More than 1 year has passed since last update.

【Node.js】WatsonサービスをSDKを使わずに呼び出す

Last updated at Posted at 2021-05-11

はじめに

Node.jsでIBMの提供するWatsonサービスをSDK(ibm-watson)を使わずに呼び出すコードを備忘録のために残します。

IAM認証せずにWatsonサービスを呼び出すので、外部のpublicなインターネットに接続のできないIBM CloudのIaaS環境からWatsonサービスを呼びたいとき、Watsonサービスをさくっと触りたいときなどに有効な方法です。

※アプリケーションがSDKを使ってWatsonサービスを呼び出す仕組みになっているが、実行環境でIAM認証出来ない(publicなインターネットに接続できない)場合には、IamAuthenticatorの代わりに、BasicAuthenticatorを使えばよいです。

今回はWatson DiscoveryというAI文書探索サービスのquery APIを呼び出すサンプルです。

セットアップ

今回はHttpクライアントとして、axiosを使用します。

npm install axios

コード

Watson Discoveryのquery APIにリクエストを送ってレスポンスをjsonファイルに出力するサンプルです。

<xxx>の部分は各自の環境の値に置き換えてください。

request_test.js
const axios = require('axios').default;
const fs = require('fs');

const username = 'apikey';
const password = <apikey>;
const instanceId = <instanceId>;
const projectId = <projectId>;
const version = '2019-11-29'
const endpoint = 'https://api.jp-tok.discovery.watson.cloud.ibm.com';

const headers = {
  'Content-Type': 'application/json'
};
const auth = 'Basic ' + Buffer.from(username + ':' + password).toString('base64');

const instance = axios.create({
  baseURL: `${endpoint}/instances/${instanceId}`,
  timeout: 10000,
  headers,
});

instance.defaults.headers.common['Authorization'] = auth;

const url = `/v2/projects/${projectId}/query?version=${version}`;

const count = 10000;
const filter = '';

instance.post(url, {
  naturalLanguageQuery: 'サンプルクエリ',
  count,
  filter,
})
.then(function (response) {
  fs.writeFileSync('./response.json', JSON.stringify(response.data, null, 2));
})
.catch(function (error) {
  console.log(error);
});

参考

  • IBM Cloud API Docs Discovery v2
  • IBM/node-sdk-core
    • API Docsでサンプルで提示されているIamAuthenticatorの実装についてはここで確認できます。私はこのライブラリを眺めていてBasicAuthenticatorというauthenticatorの存在を知りました。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0