今度は JIRA Server platform REST API を使用することになりました。
とりあえず基本認証をすれば使えるとのことで、英語のドキュメントを読み漁ることに。
Basic authentication
さぁ Google 翻訳さんの出番ですよ!
いつもありがとうございます。m(_ _)m
#基本認証に必要なこと
Token 発行したり、色々と必要になるのかと思いきや、JIRA にログインできる ID と PASS があれば API も利用できるそうです。
なんだか敷居が低くてびっくり。
ただ、ID と PASS は : で区切ってくっつけたのち、BASE64 エンコーディングしとかないといけないみたいです。
ex)'JIRA ID' + ':' + 'JIRA PASSWAORD'
← これを BASE64 エンコーディングする
Buffer クラスを利用した BASE64 エンコード
Node.js で BASE64 エンコードするには Buffer クラスを利用します。
標準ライブラリですので、そのまま使用することができます。
const buffer = new Buffer('JIRA ID' + ':' + 'JIRA PASSWAORD');
const string = buffer.toString('base64');
JIRA API のお決まりで、エンコードした文字列の頭に 'Basic '
とつける必要があります。
半角スペースが入るので注意ですね!
あとは header に Authorization
パラメータとして乗っければ OK です。
#API を Request する
あとは、使いたい API の URL を指定すれば JIRA の API を利用することができます。
今回は課題(issue)を検索する SEARCH API を利用しました。
const request = require('request-promise');
const buffer = new Buffer('JIRA ID' + ':' + 'JIRA PASSWAORD');
const string = buffer.toString('base64');
const options = {
uri: 'https://myhost.com/rest/api/2/issue/search',
headers: {
"Content-Type": 'application/json',
"Authorization": 'Basic ' + string
},
method: 'GET',
json: true
};
request(options).then((data) => {
console.log("200 OK");
console.log(data);
}).catch((error) => { console.log(error)});
> node .\ex.js
{ expand: 'schema,names',
startAt: 0,
maxResults: 50,
total: 1739,
issues:
[ { expand: 'operations,versionedRepresentations,editmeta,changelog,renderedFields',
id: '512802206',
self: 'https://myhost.com/rest/api/2/issue/502802206',
key: 'HOSTENG-5',
fields: [Object] },
{ expand: 'operations,versionedRepresentations,editmeta,changelog,renderedFields',
id: '512797809',
self: 'https://myhost.com/rest/api/2/issue/502797809',
key: 'HOSTENG-4',
fields: [Object] }
// 省略
自分のが抱えている課題のリストが表示されます。
ここで id を確認して、課題の詳細を確認したり、追記したりします。
#おわりに
ここまでお付き合いいただきありがとうございました。
たぶん、英語がちゃんと読めれば公式ドキュメントを読んですぐわかる内容だったんでしょうが、なんだか凄く苦労しました。
curl のサンプルコードを node.js で再現して response を見ても、どこにもトークンっぽいものがない!('Д')
って頭抱えていましたが、そもそもトークンとか必要ない方式でした。
同じような悩みを抱えている方の助けになれば幸いです。
他にも Cookie-based authentication とかもあるみたいで、なんだかこっちを利用している方も多いみたいなので、今度勉強したいと思います。
ではまた!(^^)/
#参考にさせていただきましたm(_ _)m