はじめに
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の存在を知りました。