Jira Service ManagementのREST APIを触ってみた

Jira Service ManagementのREST APIを触ってみた

Clock Icon2025.01.23

こんにちは。たかやまです。

Jira Service ManagementではコンソールアクセスのほかAPIでのアクセスも提供しています。

https://developer.atlassian.com/cloud/jira/service-desk/rest/intro/#about

APIを利用することで、テキストレベルでJira Service Managementのデータを取得/操作することができます。また、Jira Service Managementの自動化ルールを利用してAPIを利用した処理を行うことも可能です。

今回Jira Service ManagementのREST APIを触る機会があったので、その内容をお伝えします。

API トークンの取得

まずはこちらのドキュメントを参考にAPI トークンを取得します。

https://support.atlassian.com/ja/atlassian-account/docs/manage-api-tokens-for-your-atlassian-account/

以下のURLからAtlassian API トークン管理画面にログインします。

https://id.atlassian.com/manage-profile/security/api-tokens

ログイン後、「API トークンを作成する」を選択します。

CleanShot 2025-01-22 at 23.31.20.png

APIトークンの作成画面で「名前」と「有効期限」を設定し、「作成」を選択します。
有効期限については、以前は無期限の設定が可能でしたが、2024年12月15日以降はセキュリティ強化のため、最長1年間までの設定となります。

After December 15, 2024, by default we set API tokens to expire in one year. When you create an API token, you can set the expiration date to be from 1 day up to one year.
This does not affect your existing API tokens.

https://support.atlassian.com/ja/atlassian-account/docs/manage-api-tokens-for-your-atlassian-account/

CleanShot 2025-01-10 at 20.27.45.png

APIトークンは作成後に一度だけ表示されます。再表示はできませんので、注意してください。

CleanShot 2025-01-10 at 20.30.50.png

APIトークン作成後は、トークンの有効期限や最終アクセス日を確認することができます。
APIトークンは再表示されませんので、安全な場所に保存して管理してください。

CleanShot 2025-01-22 at 23.54.52-1.png

API トークンを利用したアクセス

curlアクセス

では、APIトークンを利用してAPIにcurlでアクセスしてみたいと思います。

利用できるREST APIはこちらから確認できます。

https://developer.atlassian.com/cloud/jira/service-desk/rest/intro/#about

ドキュメントのサンプルコマンド内では --headerオプションを利用して Authorization: Bearer <access_token> を指定していますが、こちらのリクエストでは以下のエラーが発生しました。

{"error": "Failed to parse Connect Session Auth Token"}

なので、How to use an API tokenで紹介されている、 --user オプションを利用して <email>:<api_token> を指定する方法でアクセスしてみます。

curl --request GET \
--url 'https://<mysite>.atlassian.net/rest/servicedeskapi/servicedesk' \
--user '<me@example.com>:<my-api-token>'
--header 'Accept: application/json'
  • <mysite> : Jira Service Managementのサブドメイン
  • <me@example.com> : 取得したトークン管理者メールアドレス
  • <my-api-token> : 取得したAPIトークン

こちらの方法でcurlを実行すると無事、以下のようなレスポンスが返ってきました。

curl --request GET \
--url 'https://<mysite>.atlassian.net/rest/servicedeskapi/servicedesk' \
--user '<me@example.com>:<my-api-token>' \
--header 'Accept: application/json'
{"size":XX,"start":X,"limit":XX,"isLastPage":true,"_links":{"self":"https://XX/rest/servicedeskapi/servicedesk","base":"https://XX","context":""},"values":[{"id":"XX","projectId":"XXXXX","projectName":"XX","projectKey":"XX","_links":{"self":"https://XX/rest/servicedeskapi/servicedesk/XX"}}, ... ]}

JSM自動化ルールアクセス

実際に運用の中では、JSM自動化ルールを組み合わせて利用するケースが多いかと思います。
合わせてJSM自動化ルール上でのAPIトークンの利用方法についても確認してみます。

JSM自動化ルールでAPIトークンを利用する場合、Webリクエストのコンポーネントを利用します。

CleanShot 2025-01-23 at 16.28.15@2x 2.png

さきほどのcurl形式のリクエストをWebリクエストとして送信する場合は以下のようになります。

curl --request GET \
--url 'https://<mysite>.atlassian.net/rest/servicedeskapi/servicedesk' \
--user '<me@example.com>:<my-api-token>' \
--header 'Accept: application/json'

ポイントとして--user オプションで指定している <email>:<api_token> は、ヘッダーに Authorization Basic でBase64エンコードされた値を利用する必要があります。

Base64エンコードする方法は以下の通りです。

echo -n "<me@example.com>:<my-api-token>" | base64

CleanShot 2025-01-23 at 16.30.16@2x.png

値を設定できたら、Webリクエスト構成から検証が可能です。
こちらの「検証」を選択し、応答で 200 が返ってくれば成功です。

CleanShot 2025-01-23 at 16.53.16@2x.png

Node.jsでのアクセス

最後にNode.jsでのアクセス方法についても確認してみます。

Node.jsでのアクセスも同様に Authorization Basic でBase64エンコードされた値を利用することでアクセスが可能です。

import fetch from 'node-fetch';

fetch('https://<mysite>.atlassian.net/rest/servicedeskapi/servicedesk', {
  method: 'GET',
  headers: {
    'Authorization': 'Basic <Base64エンコード値>',
    'Accept': 'application/json'
  }
})
  .then(response => {
    console.log(
      `Response: ${response.status} ${response.statusText}`
    );
    return response.text();
  })
  .then(text => console.log(text))
  .catch(err => console.error(err));

最後に

Atlassian APIを利用したアクセス方法をご紹介しました。

実際の運用中では取得したAPIをもとにJSM自動化ルールを回したりすると思うので、Atlassian APIを利用した自動化ルールの活用なども紹介できればと思います。

この記事が誰かのお役に立てれば幸いです。

以上、たかやま(@nyan_kotaroo)でした。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.