4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

初めて JIRA RestAPI を使ったよ

Posted at

今度は 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 を利用しました。

ex.js
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

JIRA Server platform REST API
JIRA Basic authentication

4
3
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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?