LINE WORKS API を Postman でコールしてみる（Server API 編）

##0. はじめに

本記事は下記の３回に分けて Postman を使用した LINE WORKS API のコール方法を書いてま〜す。

 * [第１回 準備編](https://qiita.com/shotamaco/items/a6e93bbc0ece64614233)
 * 第２回 Server API 編
 * [第３回 Service API 編](https://qiita.com/shotamaco/items/886d6f64db9189ee7135)

本記事は、第２回 の Server API 編です。
Server API 編を行う前に必ず「[準備編](https://qiita.com/shotamaco/items/a6e93bbc0ece64614233)」の作業を終わらせておいてください。

流れは下記の通りです。

1. Server API 用の Access Token 取得
2. 取得した Access Token で各 Server API をコール
3. まとめ

#1. Server API 用の Access Token 取得

##まずは Access Token を取得してみる
Server APIs Collection の 0_GetToken フォルダで「Server Token 取得」を選択し、「Send」をクリック。
![postman001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528703/b63d1de7-b0bd-b8ad-1dc0-b5fe1f6789d0.png)

結果として、Response の Body の JSON に access_token が返ってきます。はい、簡単！１クリック！

##どうやって取得しているの？
Postman の Reqest Send をクリックすると下記の[フロー](https://learning.getpostman.com/docs/postman/scripts/intro-to-scripts/#execution-order-of-scripts)で処理が行われます。

① Pre-request Script　→　② Request - Response　→　③ Tests

それを利用して、

**① Pre-request Script**
JWTライブラリをHTTP経由で取得し、Server Token 用の JWT を生成して Server APIs Collection の Variable 「jwt」にセット！

![postman003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528703/297909ed-5a0f-99d8-f318-deaa0ce261eb.png)

Pre-request Script の JavaScript はこんな感じ。

~~~JavaScript:Pre-request
var navigator = {};
var window = {};

// JWT ライブラリを HTTP 経由で取得
pm.sendRequest('http://kjur.github.io/jsrsasign/jsrsasign-latest-all-min.js', function (err, res) {
    if (err) {
        console.log(err);
    } else {
        // JWT ライブラリ読み込み
        eval(res.text());
        // Environment の PRIVATE_KEY を変数に代入
        const privateKey = pm.environment.get('PRIVATE_KEY');
        const header = {"alg" : "RS256", "typ" : "JWT"};
        const claimSet =
        {
          "iss": pm.environment.get('SERVER_ID'), // Environment の SERVER_ID を iss に代入
          "exp": KJUR.jws.IntDate.get("now + 1hour").toString(),
          "iat": KJUR.jws.IntDate.get("now").toString()
        }
        
        // JWT 生成
        const jwt = KJUR.jws.JWS.sign(null, header, claimSet, privateKey);

        // Server APIs Collection の Variable にセット！！！
        pm.collectionVariables.set("jwt", jwt);
        console.log(jwt);
    }
});

~~~

**② Request - Response**
①で生成した Server APIs Collection の Variable「jwt」を Body の「assertion」にセットし、Server Token 取得 API をコールすると、Response に「access_token」を返してくれる。
![postman005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528703/6a126a85-0f98-a48b-a476-659448acb3d3.png)

**③ Tests**
②の Response Body の「access_token」を Server APIs Collection の Variable「access_token」にセット！
![postman004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528703/dfe6685b-499f-cbeb-fcc0-ded459c98a06.png)

結果、Server APIs Collection の Variables は、下記の状態になるはず。
「jwt」(Token 取得したら用無し)と「access_token」がセットされてる！
![postman006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528703/8bf366c8-d97e-ae54-7235-2e036f2102f7.png)

Server APIs Collection の Authorization を確認すると、

 * TYPE：Bearer Token
 * Token：{{access_token}}　　← Server APIs Collection の Variable「access_token」を使用する

がセットされてますね。
![postman007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528703/e69f1b1f-b387-e4c5-b3de-e9e49304a0c2.png)

これを使って、Server APIs Collection 配下の各 Request は、この Access Token を使用するように設定してます。
Bot登録（1on1）の Request を例に Authorization を確認すると
![postman008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528703/ffa40273-7035-fde8-2909-b18b31cbd60c.png)
のようになってるんだよ。


#2. 取得した Access Token で各 Server API をコール
１．で取得した Access Token を使って、各 Server API をコールします。

現状は、Bot API だけしかサンプルがありません。。。どんどん追加していきます。少々お待ちを！

とりあえず、Bot登録（1on1）の Request を実行してみるとこんな感じになります。
![postman009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528703/ffb9d349-19e2-53c3-ee7e-0ec8cf9fad59.png)
botNo が返ってきたー！！！
Developer Console の Bot にちゃんと登録されてるー。
![lwdc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528703/9d379705-b086-3347-3cb2-1ba2ea88d0ed.png)


##3. まとめ

以上で、Server API 編 終了で〜す。

１番めんどうだった Access Token の取得が１クリックで完了！
ぜひ、活用してみてください。
注意：Server API の Access Token の有効期限は、２４時間です。
　　　なので有効期限が切れたら、再度「Server Token 取得」の「Send」クリック！

現状は、Bot API だけしかサンプルがありません。。。がんばって 全 API をコールしようと思います。

Postman の設定情報を更新した際は Export して GitHub の [line-works-postman](https://github.com/shotamaco/line-works-postman) の push して行こうと思っていますので watch していただければ幸いです。（[twitter](https://twitter.com/shotamaco1)でもつぶやきますので[@shotamaco1](https://twitter.com/shotamaco1)の[フォロー](https://twitter.com/shotamaco1)願います）

次回「[LINE WORKS API を Postman でコールしてみる（Service API編）](https://qiita.com/shotamaco/items/886d6f64db9189ee7135)」です。
Postman での Service API 用 Access Token の取得設定をメインに書こうと思います。

#Link
  * [LINE WORKS Developers](https://developers.worksmobile.com/)
  * [LINE WORKS ガイド（全般）](https://guide.worksmobile.com/)
  * [LINE WORKS ガイド（管理者画面）](https://guide.worksmobile.com/admin/)
  * [LINE WORKS コミュニティ](https://community.worksmobile.com/)
  * [LINE WORKS ヘルプセンター](https://help.worksmobile.com/)
  * [LINE WORKS Blog](https://line.worksmobile.com/jp/blog/)
  * [さわってわかったLINE WORKS](https://ascii.jp/elem/000/001/955/1955720/)