Node.jsでコアHTTPを使用してHTTPクライアントを作成する方法

提供:Dev Guides
移動先:案内検索

著者はCOVID-19救済基金を選択し、 Write forDOnationsプログラムの一環として寄付を受け取りました。

序章

最近のWebアプリケーションは、タスクを実行するために他のサーバーと通信するのが一般的です。 たとえば、オンラインで本を購入できるWebアプリには、顧客注文サーバー、本の在庫サーバー、および支払いサーバー間の通信が含まれる場合があります。 この設計では、さまざまなサービスがWeb API(プログラムでデータを送受信できる標準形式)を介して通信します。 Node.js アプリでは、HTTPリクエストを行うことでウェブAPIと通信できます。

Node.jsには、httphttpsモジュールがバンドルされています。 これらのモジュールには、Node.jsプログラムがHTTPリクエストに応答できるように、HTTPサーバーを作成する機能があります。 また、他のサーバーにHTTPリクエストを送信することもできます。 この重要な機能により、Node.jsプログラマーは、Node.jsを使用して最新のAPI駆動型Webアプリケーションを作成できます。 コアモジュールであるため、使用するためにライブラリをインストールする必要はありません。

このチュートリアルでは、httpsモジュールを使用して、テスト目的で偽の RESTAPIであるJSONプレースホルダーにHTTPリクエストを送信します。 まず、データを受信するための標準のHTTPリクエストであるGETリクエストを作成します。 次に、ヘッダーを追加するなど、リクエストをカスタマイズする方法を確認します。 最後に、POSTPUT、およびDELETEリクエストを作成して、外部サーバーのデータを変更できるようにします。

前提条件

  • このチュートリアルでは、Node.jsがインストールされている必要があります。 インストールすると、チュートリアル全体で使用されるhttpsモジュールにアクセスできるようになります。 このチュートリアルでは、Node.jsバージョン10.19.0を使用します。 Node.jsをmacOSまたはUbuntu18.04にインストールするには、Node.jsをインストールしてmacOSにローカル開発環境を作成する方法またはPPAを使用したインストールセクションの手順に従います。 X199X] Ubuntu18.04にNode.jsをインストールする方法。
  • HTTPリクエストの送信に使用されるメソッドには、ストリームベースのAPIがあります。 Node.jsでは、ストリームはイベントエミッターのインスタンスです。 ストリームからのデータに応答する方法は、イベントからのデータに応答する方法と同じです。 興味がある場合は、 Node.jsでのイベントエミッターの使用ガイドを読むことで、イベントエミッターに関するより深い知識を得ることができます。

ステップ1—GETリクエストを作成する

APIを操作するときは、通常、GETリクエストを実行してWebサーバーからデータを取得します。 このステップでは、Node.jsでGETリクエストを行う2つの関数を見ていきます。 コードは、公的にアクセス可能なAPIからユーザープロファイルの JSON arrayを取得します。

httpsモジュールには、GETリクエストを行うための2つの機能があります。GETリクエストのみを行うことができるget()機能と、request()です。他のタイプのリクエストを行う関数。 get()関数を使用してリクエストを行うことから始めます。

get()でリクエストする

get()関数を使用するHTTPリクエストの形式は、次のとおりです。

https.get(URL_String, Callback_Function) {
    Action
}

最初の引数は、リクエスト先のエンドポイントを含む文字列です。 2番目の引数はコールバック関数で、これを使用して応答を処理します。

まず、コーディング環境を設定します。 ターミナルで、このガイドのすべてのNode.jsモジュールを保存するフォルダーを作成します。

mkdir requests

そのフォルダを入力してください:

cd requests

テキストエディタで新しいファイルを作成して開きます。 このチュートリアルでは、ターミナルで利用できるnanoを使用します。

nano getRequestWithGet.js

Node.jsでHTTPリクエストを行うには、次の行を追加してhttpsモジュールをインポートします。

requests / getRequestWithGet.js

const https = require('https');

注::Node.jsにはhttpモジュールとhttpsモジュールがあります。 これらは同じ機能を持ち、同じように動作しますが、httpsは、トランスポート層セキュリティ(TLS / SSL)を介して要求を行います。 使用しているWebサーバーはHTTPS経由で利用できるため、httpsモジュールを使用します。 HTTPのみを持つURLとの間でリクエストを行う場合は、httpモジュールを使用します。


次に、http object を使用してAPIにGETリクエストを送信し、ユーザーのリストを取得します。 テストには、公開されているAPIである JSONPlaceholderを使用します。 このAPIは、リクエストに加えた変更の記録を保持しません。 実サーバーをシミュレートし、有効な要求を送信する限り、モックされた応答を返します。

テキストエディタで次の強調表示されたコードを記述します。

requests / getRequestWithGet.js

const https = require('https');

let request = https.get('https://jsonplaceholder.typicode.com/users?_limit=2', (res) => { });

関数のシグネチャで述べたように、get()関数は2つのパラメータを取ります。 1つ目は文字列形式でリクエストを行うAPIURLであり、2つ目はHTTP応答を処理するためのコールバックです。 応答からデータを読み取るには、コールバックにコードを追加する必要があります。

HTTP応答にはステータスコードが付属しています。 ステータスコードは、応答がどの程度成功したかを示す番号です。 200〜299のステータスコードは肯定応答であり、400〜599のコードはエラーです。 ステータスコードの詳細については、一般的なHTTPエラーコードのトラブルシューティング方法ガイドをご覧ください。

このリクエストの場合、正常な応答には200ステータスコードが含まれます。 コールバックで最初に行うことは、ステータスコードが期待どおりであることを確認することです。 次のコードをコールバック関数に追加します。

requests / getRequestWithGet.js

const https = require('https');

let request = https.get('https://jsonplaceholder.typicode.com/users?_limit=2', (res) => {
  if (res.statusCode !== 200) {
    console.error(`Did not get an OK from the server. Code: ${res.statusCode}`);
    res.resume();
    return;
  }
});

コールバックで使用可能な応答オブジェクトには、ステータスコードを格納するstatusCodeプロパティがあります。 ステータスコードが200でない場合は、コンソールにエラーを記録して終了します。

res.resume()がある行に注意してください。 パフォーマンスを向上させるためにその行を含めました。 HTTPリクエストを行う場合、Node.jsはリクエストとともに送信されるすべてのデータを消費します。 res.resume()メソッドは、Node.jsにストリームのデータを無視するように指示します。 同様に、Node.jsは通常、ガベージコレクションにデータを残す場合よりも迅速にデータを破棄します。これは、アプリケーションのメモリを解放する定期的なプロセスです。

エラー応答をキャプチャしたので、データを読み取るためのコードを追加します。 Node.js応答は、データをチャンクでストリーミングします。 データを取得するための戦略は、データが応答から取得されたときにリッスンし、すべてのチャンクを照合してから、アプリケーションがそれを使用できるようにJSONを解析することです。

次のコードを含めるようにリクエストコールバックを変更します。

requests / getRequestWithGet.js

const https = require('https');

let request = https.get('https://jsonplaceholder.typicode.com/users?_limit=2', (res) => {
  if (res.statusCode !== 200) {
    console.error(`Did not get an OK from the server. Code: ${res.statusCode}`);
    res.resume();
    return;
  }

  let data = '';

  res.on('data', (chunk) => {
    data += chunk;
  });

  res.on('close', () => {
    console.log('Retrieved all data');
    console.log(JSON.parse(data));
  });
});

空の文字列である新しい変数dataを作成することから始めます。 データは、バイトデータまたは文字列を表す数値の配列として格納できます。 このチュートリアルでは、JSON文字列をJavaScriptオブジェクトに変換する方が簡単なので後者を使用します。

data変数を作成した後、イベントリスナーを作成します。 Node.jsは、HTTP応答のデータをチャンクでストリーミングします。 したがって、応答オブジェクトがdataイベントを発行すると、受信したデータを取得してdata変数に追加します。

サーバーからすべてのデータを受信すると、Node.jsはcloseイベントを発行します。 この時点で、dataに保存されているJSON文字列を解析し、結果をコンソールに記録します。

これで、Node.jsモジュールがJSON APIと通信し、ユーザーのリストをログに記録できるようになります。これは、3人のユーザーのJSON配列になります。 ただし、最初に行うことができる小さな改善が1つあります。

リクエストできない場合、このスクリプトはエラーをスローします。 たとえば、インターネット接続が失われた場合、リクエストを送信できない場合があります。 HTTPリクエストを送信できない場合にエラーをキャプチャするには、次のコードを追加します。

requests / getRequestWithGet.js

...
  res.on('data', (chunk) => {
    data += chunk;
  });

  res.on('close', () => {
    console.log('Retrieved all data');
    console.log(JSON.parse(data));
  });

});

request.on('error', (err) => {
  console.error(`Encountered an error trying to make a request: ${err.message}`);
});

リクエストが行われたが送信できない場合、リクエストオブジェクトはerrorイベントを発行します。 errorイベントが発行されたがリッスンされていない場合、Node.jsプログラムがクラッシュします。 したがって、エラーをキャプチャするには、on()関数を使用してイベントリスナーを追加し、errorイベントをリッスンします。 エラーが発生した場合は、そのメッセージをログに記録します。

このファイルのコードはこれですべてです。 CTRL+Xを押して、nanoを保存して終了します。

次に、nodeを使用してこのプログラムを実行します。

node getRequestWithGet.js

コンソールに次の応答が表示されます。

OutputRetrieved all data
[
  {
    id: 1,
    name: 'Leanne Graham',
    username: 'Bret',
    email: '[email protected]',
    address: {
      street: 'Kulas Light',
      suite: 'Apt. 556',
      city: 'Gwenborough',
      zipcode: '92998-3874',
      geo: [Object]
    },
    phone: '1-770-736-8031 x56442',
    website: 'hildegard.org',
    company: {
      name: 'Romaguera-Crona',
      catchPhrase: 'Multi-layered client-server neural-net',
      bs: 'harness real-time e-markets'
    }
  },
  {
    id: 2,
    name: 'Ervin Howell',
    username: 'Antonette',
    email: '[email protected]',
    address: {
      street: 'Victor Plains',
      suite: 'Suite 879',
      city: 'Wisokyburgh',
      zipcode: '90566-7771',
      geo: [Object]
    },
    phone: '010-692-6593 x09125',
    website: 'anastasia.net',
    company: {
      name: 'Deckow-Crist',
      catchPhrase: 'Proactive didactic contingency',
      bs: 'synergize scalable supply-chains'
    }
  }
]

これは、コアNode.jsライブラリを使用してGETリクエストを正常に作成したことを意味します。

使用したget()メソッドは、Node.jsが提供する便利なメソッドです。これは、GETリクエストが非常に一般的なタイプのリクエストであるためです。 Node.jsは、任意のタイプのリクエストを行うためのrequest()メソッドを提供します。 次に、このチュートリアルでは、request()を使用してGETリクエストを作成する方法を検討します。

request()でリクエストする

request()メソッドは、複数の関数シグネチャをサポートします。 次の例では、これを使用します。

https.request(URL_String, Options_Object, Callback_Function) {
    Action
}

最初の引数は、APIエンドポイントを持つ文字列です。 2番目の引数は、リクエストのすべてのオプションを含むJavaScriptオブジェクトです。 最後の引数は、応答を処理するためのコールバック関数です。

getRequestWithRequest.jsという名前の新しいモジュールの新しいファイルを作成します。

nano getRequestWithRequest.js

作成するコードは、前に作成したgetRequestWithGet.jsモジュールに似ています。 まず、httpsモジュールをインポートします。

requests / getRequestWithRequest.js

const https = require('https');

次に、methodキーを含む新しいJavaScriptオブジェクトを作成します。

requests / getRequestWithRequest.js

const https = require('https');

const options = {
  method: 'GET'
};

このオブジェクトのmethodキーは、request()関数にリクエストが使用しているHTTPメソッドを通知します。

次に、コードでリクエストを行います。 次のコードブロックは、get()メソッドで行われたリクエストとは異なるコードを強調しています。 エディターで、次のすべての行を入力します。

requests / getRequestWithRequest.js

...

let request = https.request('https://jsonplaceholder.typicode.com/users?_limit=2', options, (res) => {
  if (res.statusCode !== 200) {
    console.error(`Did not get an OK from the server. Code: ${res.statusCode}`);
    res.resume();
    return;
  }

  let data = '';

  res.on('data', (chunk) => {
    data += chunk;
  });

  res.on('close', () => {
    console.log('Retrieved all data');
    console.log(JSON.parse(data));
  });
});

request.end();

request.on('error', (err) => {
  console.error(`Encountered an error trying to make a request: ${err.message}`);
});

request()を使用してリクエストを行うには、最初の引数にURL、2番目の引数にHTTPオプションを持つオブジェクト、3番目の引数の応答を処理するコールバックを指定します。

前に作成したoptions変数は2番目の引数であり、これがGETリクエストであることをNode.jsに通知します。 コールバックは、最初に書き込んだときから変更されていません。

request変数のend()メソッドも呼び出します。 これは、request()関数を使用するときに呼び出す必要がある重要なメソッドです。 リクエストが完了し、送信できるようになります。 これを呼び出さないと、Node.jsはリクエストに追加するデータがまだあると見なすため、プログラムは完了しません。

nanoCTRL+Xで保存して終了するか、テキストエディタで同等の機能を使用して終了します。

ターミナルでこのプログラムを実行します。

node getRequestWithRequest.js

最初のモジュールと同じ次の出力が表示されます。

OutputRetrieved all data
[
  {
    id: 1,
    name: 'Leanne Graham',
    username: 'Bret',
    email: '[email protected]',
    address: {
      street: 'Kulas Light',
      suite: 'Apt. 556',
      city: 'Gwenborough',
      zipcode: '92998-3874',
      geo: [Object]
    },
    phone: '1-770-736-8031 x56442',
    website: 'hildegard.org',
    company: {
      name: 'Romaguera-Crona',
      catchPhrase: 'Multi-layered client-server neural-net',
      bs: 'harness real-time e-markets'
    }
  },
  {
    id: 2,
    name: 'Ervin Howell',
    username: 'Antonette',
    email: '[email protected]',
    address: {
      street: 'Victor Plains',
      suite: 'Suite 879',
      city: 'Wisokyburgh',
      zipcode: '90566-7771',
      geo: [Object]
    },
    phone: '010-692-6593 x09125',
    website: 'anastasia.net',
    company: {
      name: 'Deckow-Crist',
      catchPhrase: 'Proactive didactic contingency',
      bs: 'synergize scalable supply-chains'
    }
  }
]

これで、request()メソッドを使用してGETリクエストを作成しました。 他のHTTPメソッドでリクエストを行う場合のように、get()メソッドではできない方法でリクエストをカスタマイズできるため、この関数を知っておくことが重要です。

次に、request()機能を使用してリクエストを構成およびカスタマイズします。

ステップ2— HTTPrequest()オプションの構成

request()関数を使用すると、最初の引数でURLを指定せずにHTTPリクエストを送信できます。 この場合、URLはoptionsオブジェクトに含まれ、request()には次の関数シグネチャが含まれます。

https.request(Options_Object, Callback_Function) {
    Action
}

このステップでは、この機能を使用して、request()optionsオブジェクトで構成します。

Node.jsを使用すると、リクエストに渡すoptionsオブジェクトにURLを入力できます。 これを試すには、getRequestWithRequest.jsファイルを再度開きます。

nano getRequestWithRequest.js

request()呼び出しからURLを削除して、引数がoptions変数とコールバック関数のみになるようにします。

requests / getRequestWithRequest.js

const https = require('https');

const options = {
  method: 'GET',
};

let request = https.request(options, (res) => {
...

次に、optionsオブジェクトに次のプロパティを追加します。

requests / getRequestWithRequest.js

const https = require('https');

const options = {
  host: 'jsonplaceholder.typicode.com',
  path: '/users?_limit=2',
  method: 'GET'
};

let request = https.request(options, (res) => {
...

1つの文字列URLの代わりに、hostpathの2つのプロパティがあります。 hostは、アクセスしているサーバーのドメイン名またはIPアドレスです。 パスは、クエリパラメータ(疑問符の後の値)を含む、ドメイン名の後に続くすべてのものです。

オプションオブジェクトは、リクエストに含まれる他の有用なデータを保持できます。 たとえば、オプションでリクエストヘッダーを指定できます。 ヘッダーは通常、リクエストに関するメタデータを送信します。

開発者がAPIを作成するとき、さまざまなデータ形式をサポートすることを選択できます。 1つのAPIエンドポイントは、JSON、 CSV 、またはXMLでデータを返すことができる場合があります。 これらのAPIでは、サーバーはAcceptヘッダーを調べて、正しい応答タイプを判別する場合があります。

Acceptヘッダーは、ユーザーが処理できるデータのタイプを指定します。 これらの例で使用されているAPIはJSONのみを返しますが、Acceptヘッダーをリクエストに追加して、JSONが必要であることを明示的に示すことができます。

次のコード行を追加して、Acceptヘッダーを追加します。

requests / getRequestWithRequest.js

const https = require('https');

const options = {
  host: 'jsonplaceholder.typicode.com',
  path: '/users?_limit=2',
  method: 'GET',
  headers: {
    'Accept': 'application/json'
  }
};

ヘッダーを追加することで、Node.js HTTPリクエストで送信される最も一般的な4つのオプション、hostpathmethodheadersについて説明しました。 ]。 Node.jsはさらに多くのオプションをサポートしています。 詳細については、公式Node.jsドキュメントを参照してください。

CTRL+Xと入力してファイルを保存し、nanoを終了します。

次に、コードをもう一度実行して、オプションのみを使用してリクエストを行います。

node getRequestWithRequest.js

結果は以前の実行と同じになります。

OutputRetrieved all data
[
  {
    id: 1,
    name: 'Leanne Graham',
    username: 'Bret',
    email: '[email protected]',
    address: {
      street: 'Kulas Light',
      suite: 'Apt. 556',
      city: 'Gwenborough',
      zipcode: '92998-3874',
      geo: [Object]
    },
    phone: '1-770-736-8031 x56442',
    website: 'hildegard.org',
    company: {
      name: 'Romaguera-Crona',
      catchPhrase: 'Multi-layered client-server neural-net',
      bs: 'harness real-time e-markets'
    }
  },
  {
    id: 2,
    name: 'Ervin Howell',
    username: 'Antonette',
    email: '[email protected]',
    address: {
      street: 'Victor Plains',
      suite: 'Suite 879',
      city: 'Wisokyburgh',
      zipcode: '90566-7771',
      geo: [Object]
    },
    phone: '010-692-6593 x09125',
    website: 'anastasia.net',
    company: {
      name: 'Deckow-Crist',
      catchPhrase: 'Proactive didactic contingency',
      bs: 'synergize scalable supply-chains'
    }
  }
]

APIはプロバイダーごとに異なる可能性があるため、optionsオブジェクトに慣れることは、データ型とヘッダーが最も一般的なバリエーションの一部である、さまざまな要件に適応するための鍵となります。

これまでのところ、データを取得するためのGETリクエストのみを実行しました。 次に、Node.jsを使用してPOSTリクエストを作成し、サーバーにデータをアップロードできるようにします。

ステップ3—POSTリクエストを作成する

サーバーにデータをアップロードする場合、またはサーバーにデータを作成させたい場合は、通常、POSTリクエストを送信します。 このセクションでは、Node.jsでPOSTリクエストを作成します。 usersAPIで新しいユーザーを作成するようにリクエストします。

GETとは異なる方法ですが、POSTリクエストを作成するときに、以前のリクエストのコードを再利用できます。 ただし、次の調整を行う必要があります。

  • optionsオブジェクトのメソッドをPOSTに変更します
  • JSONをアップロードしていることを示すヘッダーを追加します
  • ステータスコードをチェックして、ユーザーが作成されたことを確認します
  • 新しいユーザーのデータをアップロードする

これらの変更を行うには、最初にpostRequest.jsという名前の新しいファイルを作成します。 このファイルをnanoまたは別のテキストエディタで開きます。

nano postRequest.js

httpsモジュールをインポートし、optionsオブジェクトを作成することから始めます。

requests / postRequest.js

const https = require('https');

const options = {
  host: 'jsonplaceholder.typicode.com',
  path: '/users',
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json; charset=UTF-8'
  }
};

pathを変更して、POSTリクエストに必要なものと一致させます。 また、methodPOSTに更新しました。 最後に、オプションContent-Typeに新しいヘッダーを追加しました。 このヘッダーは、アップロードするデータのタイプをサーバーに通知します。 この場合、UTF-8エンコーディングを使用してJSONデータをアップロードします。

次に、request()関数でリクエストします。 これは、GETリクエストを行った方法と似ていますが、200とは異なるステータスコードを探します。 コードの最後に次の行を追加します。

requests / postRequest.js

...
const request = https.request(options, (res) => {
  if (res.statusCode !== 201) {
    console.error(`Did not get a Created from the server. Code: ${res.statusCode}`);
    res.resume();
    return;
  }

  let data = '';

  res.on('data', (chunk) => {
    data += chunk;
  });

  res.on('close', () => {
    console.log('Added new user');
    console.log(JSON.parse(data));
  });
});

強調表示されたコード行は、ステータスコードが201であるかどうかを確認します。 201ステータスコードは、サーバーがリソースを作成したことを示すために使用されます。

このPOSTリクエストは、新しいユーザーを作成するためのものです。 このAPIの場合、ユーザーの詳細をアップロードする必要があります。 いくつかのユーザーデータを作成し、POSTリクエストで送信します。

requests / postRequest.js

...

const requestData = {
  name: 'New User',
  username: 'digitalocean',
  email: '[email protected]',
  address: {
    street: 'North Pole',
    city: 'Murmansk',
    zipcode: '12345-6789',
  },
  phone: '555-1212',
  website: 'digitalocean.com',
  company: {
    name: 'DigitalOcean',
    catchPhrase: 'Welcome to the developer cloud',
    bs: 'cloud scale security'
  }
};

request.write(JSON.stringify(requestData));

最初に、ユーザーデータを含むJavaScriptオブジェクトであるrequestData変数を作成しました。 サーバーは通常、新しいデータの保存中にこれらを生成するため、リクエストにはidフィールドが含まれていません。

次に、request.write()関数を使用します。この関数は、文字列またはバッファオブジェクトを受け入れて、リクエストと一緒に送信します。 requestData変数はオブジェクトであるため、JSON.stringify関数を使用して文字列に変換しました。

このモジュールを完了するには、リクエストを終了してエラーを確認してください。

requests / postRequest.js

...

request.end();

request.on('error', (err) => {
  console.error(`Encountered an error trying to make a request: ${err.message}`);
});

end()機能を使用する前に、データを書き込むことが重要です。 end()関数は、リクエストに追加するデータがこれ以上ないことをNode.jsに通知し、それを送信します。

CTRL+Xを押して、nanoを保存して終了します。

このプログラムを実行して、新しいユーザーが作成されたことを確認します。

node postRequest.js

次の出力が表示されます。

OutputAdded new user
{
  name: 'New User',
  username: 'digitalocean',
  email: '[email protected]',
  address: { street: 'North Pole', city: 'Murmansk', zipcode: '12345-6789' },
  phone: '555-1212',
  website: 'digitalocean.com',
  company: {
    name: 'DigitalOcean',
    catchPhrase: 'Welcome to the developer cloud',
    bs: 'cloud scale security'
  },
  id: 11
}

出力は、要求が成功したことを確認します。 APIは、アップロードされたユーザーデータとそれに割り当てられたIDを返しました。

POSTリクエストを作成する方法を学習したので、Node.jsのサーバーにデータをアップロードできます。 次に、サーバー内のデータを更新するために使用される方法であるPUTリクエストを試してみます。

ステップ4—PUTリクエストを作成する

開発者は、サーバーにデータをアップロードするためにPUTリクエストを行います。 これはPOSTリクエストに似ているかもしれませんが、PUTリクエストは異なる機能を持っています。 PUTリクエストはべき等です。PUTリクエストは複数回実行でき、同じ結果になります。

実際には、作成するコードはPOSTリクエストのコードと似ています。 オプションを設定し、リクエストを行い、アップロードするデータを書き込み、応答を確認します。

これを試すには、最初のユーザーのユーザー名を更新するPUTリクエストを作成します。

コードはPOSTリクエストに似ているため、このモジュールのベースとしてそのモジュールを使用します。 postRequest.jsを新しいファイルputRequest.jsにコピーします。

cp postRequest.js putRequest.js

次に、テキストエディタでputRequest.jsを開きます。

nano putRequest.js

PUTリクエストをhttps://jsonplaceholder.typicode.com/users/1に送信するように、これらの強調表示された変更を行います。

requests / putRequest.js

const https = require('https');

const options = {
  host: 'jsonplaceholder.typicode.com',
  path: '/users/1',
  method: 'PUT',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json; charset=UTF-8'
  }
};

const request = https.request(options, (res) => {
  if (res.statusCode !== 200) {
    console.error(`Did not get an OK from the server. Code: ${res.statusCode}`);
    res.resume();
    return;
  }

  let data = '';

  res.on('data', (chunk) => {
    data += chunk;
  });

  res.on('close', () => {
    console.log('Updated data');
    console.log(JSON.parse(data));
  });
});

const requestData = {
  username: 'digitalocean'
};

request.write(JSON.stringify(requestData));

request.end();

request.on('error', (err) => {
  console.error(`Encountered an error trying to make a request: ${err.message}`);
});

まず、optionsオブジェクトのpathおよびmethodプロパティを変更します。 この場合、pathは、更新するユーザーを識別します。 リクエストを行うときは、レスポンスコードが200であるかどうかを確認します。これは、リクエストがOKであることを意味します。 現在アップロードしているデータには、更新しているプロパティのみが含まれています。

CTRL+Xを使用してnanoを保存して終了します。

次に、ターミナルでこのNode.jsプログラムを実行します。

node putRequest.js

次の出力が表示されます。

OutputUpdated data
{ username: 'digitalocean', id: 1 }

PUTリクエストを送信して、既存のユーザーを更新しました。

これまで、データを取得、追加、および更新する方法を学習しました。 APIを介してデータを管理する完全なコマンドを提供するには、次にDELETEリクエストを実行して、サーバーからデータを削除します。

ステップ5—DELETEリクエストを作成する

DELETEリクエストは、サーバーからデータを削除するために使用されます。 リクエスト本文を持つことができますが、ほとんどのAPIはリクエスト本文を必要としない傾向があります。 このメソッドは、サーバーからオブジェクト全体を削除するために使用されます。 このセクションでは、APIを使用してユーザーを削除します。

作成するコードはGETリクエストのコードと似ているため、このモジュールのベースとしてそのモジュールを使用します。 getRequestWithRequest.jsファイルを新しいdeleteRequest.jsファイルにコピーします。

cp getRequestWithRequest.js deleteRequest.js

deleteRequest.jsnanoで開きます。

nano deleteRequest.js

次に、強調表示された部分のコードを変更して、APIの最初のユーザーを削除できるようにします。

requests / putRequest.js

const https = require('https');

const options = {
  host: 'jsonplaceholder.typicode.com',
  path: '/users/1',
  method: 'DELETE',
  headers: {
    'Accept': 'application/json',
  }
};

const request = https.request(options, (res) => {
  if (res.statusCode !== 200) {
    console.error(`Did not get an OK from the server. Code: ${res.statusCode}`);
    res.resume();
    return;
  }

  let data = '';

  res.on('data', (chunk) => {
    data += chunk;
  });

  res.on('close', () => {
    console.log('Deleted user');
    console.log(JSON.parse(data));
  });
});

request.end();

request.on('error', (err) => {
  console.error(`Encountered an error trying to make a request: ${err.message}`);
});

このモジュールでは、まず、optionsオブジェクトのpathプロパティを、削除するリソース(最初のユーザー)に変更します。 次に、メソッドをDELETEに変更します。

CTRL+Xを押して、このファイルを保存して終了します。

このモジュールを実行して、動作することを確認します。 ターミナルで次のコマンドを入力します。

node deleteRequest.js

プログラムはこれを出力します:

OutputDeleted user
{}

APIは応答本文を返しませんが、200の応答を受け取ったため、要求はOKでした。

これで、Node.jsコアモジュールを使用してDELETEリクエストを作成する方法を学習しました。

結論

このチュートリアルでは、Node.jsでGETPOSTPUT、およびDELETEリクエストを作成しました。 ライブラリはインストールされていません。 これらの要求は、標準のhttpsモジュールを使用して行われました。 GETリクエストはget()関数で行うことができますが、他のすべてのHTTPメソッドはrequest()メソッドを介して行われます。

あなたが書いたコードは、公開されているテストAPI用に書かれています。 ただし、リクエストの記述方法は、すべてのタイプのAPIで機能します。 APIについて詳しく知りたい場合は、APIトピックページをご覧ください。 Node.jsでの開発の詳細については、Node.jsシリーズのコーディング方法に戻ってください。