すごく久々の、PowerShell記事です!
半年ぶりぐらい…
Jiraについて
ソフトウェア開発の管理ソフトで、Jira
というのがあります。*1
普段はブラウザでポチポチ操作するのですが、APIが公開されているとのことなので、遊んでみました。
なお、実際に業務で使っているソフトなので、ソース等記載しますが、URL等は適当です。
また、サーバー導入型で使っているので、クラウドやデータセンター利用の場合は、内容が違うかもしれません。
APIのページ
見てみたら、サーバーやクラウド等で分かれているようです。
サーバー導入型の場合(最新)
クラウドの場合
ログイン
https://docs.atlassian.com/jira/REST/server/#auth/1/session-login
# JiraサーバーへのURL $hostUrl = "http://example.com/jira" # REST API記載のURL $login = "rest/auth/1/session" $hosturi = New-Object System.Uri ($hostUrl) $url = New-Object System.Uri ($hosturi, $login) # 自身のログイン情報に置き換える $inputs = @{ username = "userName"; password = "pass"; } $json = $inputs | ConvertTo-Json; $headers = @{ Accept = "application/json"; } $res = Invoke-RestMethod -uri $url.AbsoluteUri ` -Method Post ` -Body $json ` -ContentType "application/json" ` -Headers $headers ` -SessionVariable loginSession # loginSessionに、セッション情報が格納される
ちょっとした解説をします。
わざわざ
System.Uri
を使う理由
URLの結合は、個人的には面倒に感じます。
なので、.NETに任せてしまっています。戻り値
$res
セッションID等が返ってきますが、特に使いません。
後述のセッション内に値があるので、それをそのまま使います。
Invoke-RestMethod
で戻り値を取得しているので、この中はJSON
形式の値が入ってきます。
リファレンスに、何が返ってくるか書いてあるので、詳細はそちらを参照ください。-SessionVariable
について
この後、別のREST APIを呼び出す際に必要です。
情報取得
ログインした際のセッションを使って、別のAPIを呼び出します。
今回は例なので、Current User
を呼び出します。
APIを呼び出した人(ログイン者)の情報を返します。
https://docs.atlassian.com/jira/REST/server/#auth/1/session-currentUser
$res2 = Invoke-RestMethod -uri $url.AbsoluteUri ` -Method Get ` -ContentType "application/json" ` -Headers $headers ` -WebSession $loginSession
さっきとほとんど一緒じゃねえか!と思うかもしれませんが、実際、URL一緒だし、Method
がGet
になったぐらいです。
また、ちょっと解説します。
-WebSession
について
ここで、ログインで取得したセッション($loginSession
)を渡します。
こうすることで、自動的に認証されます。戻り値
$res2
について
ログイン失敗回数等が入ってきます。楽しい。
下記は、戻り値中loginInfo
の値です。
failedLoginCount loginCount lastFailedLoginTime previousLoginTime ---------------- ---------- ------------------- ----------------- 21 309 2017-10-12T16:24:58.733+0900 2017-10-12T20:11:24.318+0900
ログアウト
処理が終わったらきちんとログアウトして、余計なもの*2が残らないようにしましょう。
https://docs.atlassian.com/jira/REST/server/#auth/1/session-logout
Invoke-RestMethod -uri $url.AbsoluteUri ` -Method Delete ` -ContentType "application/json" ` -Headers $headers ` -WebSession $loginSession
またもや、URLは一緒なので、見た目はほぼ一緒です。
今度はMethod
がDelete
になっています。
なお、戻り値は返ってきません。*3
余談
チュートリアルもあるようです。
JIRA REST API Tutorials - Atlassian Developers
これやった後、通常のログインページから、PowerShellでログインできないか、試していました。
結果から言うと、私には無理でした…
Web初心者なので、もっと勉強して、いつか通常のログインページから、PowerShellでログインしてみたいです。
※ログインできたら満足!
普通に便利に使うなら、REST APIを使ってアクセスしましょう。