JavaScript
Node.js
api
HTTPS

Node.jsの標準モジュール(https)でAPIを叩く(GETのみ)

More than 1 year has passed since last update.

Node.jsを始めたばかりでAPIの叩き方が分からなかったのでメモ。
一般的にはrequestモジュールを使用するようですが、モジュール無しでサクッと書きたいことがあったので。

APIを叩くテストとして「RANDOM USER GENERATOR」を使用。
(このサービスはアプリケーションのテスト用に、適当なダミーユーザを作成するものらしいです。)

基本型

以下のようにhttps.requestの引数に直接URIを渡すと、自動的にhttpメソッドは'GET'になる。responseデータはres.onイベントで受け取る。最後にreq.end()を呼ばないと動かないので注意。

const https = require('https');
const req = https.request('URI', (res) => {
        res.on('data', (chunk) => {

    ...

    });

    ....

})
req.end();

実装例

URI: https://randomuser.me/api/?inc=gender,name,nat&format=PrettyJSON
httpメソッド: 'GET'
query: inc=gender,name,nat&format=PrettyJSON

https_request.js
const https = require('https');

const req = https.request('https://randomuser.me/api/?inc=gender,name,nat&format=PrettyJSON', (res) => {
    res.on('data', (chunk) => {
        console.log(`BODY: ${chunk}`);
    });
    res.on('end', () => {
        console.log('No more data in response.');
    });
})

req.on('error', (e) => {
  console.error(`problem with request: ${e.message}`);
});

req.end();

結果

queryで指定した「gender」、「name」、「nat」プロパティだけを取得出来ている。

BODY: {
  "results": [
    {
      "gender": "female",
      "name": {
        "title": "miss",
        "first": "shivanie",
        "last": "van kekem"
      },
      "nat": "NL"
    }
  ],
  "info": {
    "seed": "cdac8f9044c4fe04",
    "results": 1,
    "page": 1,
    "version": "1.1"
  }
}
No more data in response.

Optionsを使って書く

先程のようにURIを直接指定するのではなく、optionsに各要素を書くことも出来る。queryはpathに書く。
optionsの書き方は公式リファレンスに書いてある。(httpモジュールのリファレンスですが、多分httpsでもだいたい同じだと思う。。。)
https://nodejs.org/api/http.html#http_http_request_options_callback

const https = require('https');

const options = {
  protocol: 'PROTOCOL',
  host: 'HOST',
  path: 'PATH'+'QUERY',
  method: 'METHOD',
    headers: {
    'Content-Type': 'CONTENT-TYPE'
  }
};

const req = https.request(options, (res) => {
        res.on('data', (chunk) => {

    ...

    });

    ....

})
req.end();

実装例

URI: https://randomuser.me/api/?inc=gender,name,nat&format=PrettyJSON
httpメソッド: 'GET'
query: inc=gender,name,nat&format=PrettyJSON

https_request.js
const https = require('https');

const options = {
  protocol: 'https:',
  host: 'www.randomuser.me',
  path: '/api'+'?inc=gender,name,nat&format=PrettyJSON',
  method: 'GET',
};

const req = https.request(options, (res) => {
    res.on('data', (chunk) => {
        console.log(`BODY: ${chunk}`);
    });
    res.on('end', () => {
        console.log('No more data in response.');
    });
})

req.on('error', (e) => {
  console.error(`problem with request: ${e.message}`);
});

req.end();

結果

BODY: {
  "results": [
    {
      "gender": "female",
      "name": {
        "title": "ms",
        "first": "patricia",
        "last": "evans"
      },
      "nat": "GB"
    }
  ],
  "info": {
    "seed": "795d48206f63ba29",
    "results": 1,
    "page": 1,
    "version": "1.1"
  }
}
No more data in response.