【備忘録】WEB APIをたたく



### はじめに
WEB-API (REST-API)を試したくなり、自宅PCでお手軽にできる方法で実験。
今回は GUI から（postman）ではく、コマンドラインからREST-APIの連続実行を可能とするため、newmanから実行する環境を構築～実行までを行います。

### 目次
１．環境構築
２．お試し実行
３．感想

### １．環境構築
 ・ WSL2インストール
 ・ node.js インストール
 ・ npm インストール
 ・ newman インストール
 ・ postman インストール

 
 **(1) WSL2インストール**
 　コマンドプロンプトで下記のコマンドを実行するだけ。簡単にWSL2（ubuntu）が使えるようになりました。。。

   ```
   wsl --install
   ```
この後、PCの再起動を行います（ガイドに従うだけ）。
インストール後の確認
   ```
   C:\Users\xxxxx> wsl -l -v
     NAME      STATE           VERSION
   * Ubuntu    Running         2

   C:\Users\xxxxx>wsl --version
   WSL バージョン: 2.1.5.0
   カーネル バージョン: 5.15.146.1-2
   WSLg バージョン: 1.0.60
   MSRDC バージョン: 1.2.5105
   Direct3D バージョン: 1.611.1-81528511
   DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
   Windows バージョン: 10.0.22631.3296
   ```


 **(2) node.js インストール-1回目**
     apt でインストールしましたが、インストールされたバージョンが古く(v12)、newman が動作しなかった。後ほど最新版をインストールしました（(5) node.js インストール-2回目）。
```
$ sudo apt install nodejs
```
後で入れ直すことになるのに・・・
    
 **(3) npm インストール**
```
$ sudo apt install npm
```

 **(4) newman インストール**
```
$ sudo npm install -g newman
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: 'newman@6.1.2',
npm WARN EBADENGINE   required: { node: '>=16' },
npm WARN EBADENGINE   current: { node: 'v12.22.9', npm: '8.5.1' }
npm WARN EBADENGINE }
:
:
:
```
 node は 16以上って事で WARN が表示されている・・・
(2)でインストールした node.js は v12 でした。
 
 **(5) node.js インストール-2回目**
最新版のインストールに難儀していたが、nパッケージを使うと良いらしい。
nパッケージ構築には node.js, npm が前提となるので先にインストールした node.js, npm は残しつつ nパッケージをインストール
```
$ npm -g install n
```
続いて node.js（安定版）インストール
```
$ sudo n stable
```
npmでインストールしたときは v12 でしたが、v20 になりました。
```
$ node -v
v20.12.1
```
最初に入れた node.js, npm は削除しておく。
```
$ sudo apt purge -y nodejs npm
```

 
 **(5) postman インストール**
普通にデスクトップアプリのpostmanをインストールします。



### ２．お試し実行
・REST-APIを提供するサイトを見つける
・postmanで試す
・newman でpostmanで試したスクリプトを実行する

 **(1) REST-APIを提供するサイトを見つける**
NHKで番組表APIが利用できるのでお試し利用する。

**(2) postman で試す**
⇒ 「status=200」が返ると"Successful POST request"を出力させる 
① "Program List API"
② "Now On Air API"
③ テストスクリプト作成
③ コレクションのエクスポート

**(3)**
(2)③で出力したスクリプトを newman で実行する。
```
$ newman run sample_for_me.postman_collection.json
newman

sample_for_me

→ ProgramListAPI
  GET https://api.nhk.or.jp/v2/pg/list/130/g1/2024-04-05.json?key=******************************** [200 OK, 109.56kB, 189ms]
  ✓  Successful POST request

→ NowOnAirAPI
  GET https://api.nhk.or.jp/v2/pg/now/130/g1.json?key=******************************** [200 OK, 3.39kB, 94ms]
  ✓  Successful POST request

┌─────────────────────────┬────────────────────┬───────────────────┐
│                         │           executed │            failed │
├─────────────────────────┼────────────────────┼───────────────────┤
│              iterations │                  1 │                 0 │
├─────────────────────────┼────────────────────┼───────────────────┤
│                requests │                  2 │                 0 │
├─────────────────────────┼────────────────────┼───────────────────┤
│            test-scripts │                  2 │                 0 │
├─────────────────────────┼────────────────────┼───────────────────┤
│      prerequest-scripts │                  0 │                 0 │
├─────────────────────────┼────────────────────┼───────────────────┤
│              assertions │                  2 │                 0 │
├─────────────────────────┴────────────────────┴───────────────────┤
│ total run duration: 356ms                                        │
├──────────────────────────────────────────────────────────────────┤
│ total data received: 112.07kB (approx)                           │
├──────────────────────────────────────────────────────────────────┤
│ average response time: 141ms [min: 94ms, max: 189ms, s.d.: 47ms] │
└──────────────────────────────────────────────────────────────────┘
$
```
サマリーでるんですね、凄い。


### ３．感想
これは便利。一通りのやり方が試せたので、CI/CDに活用させるため色々実験します。