Node.jsでコアHTTPを使用してHTTPクライアントを作成する方法
著者はCOVID-19救済基金を選択し、 Write forDOnationsプログラムの一環として寄付を受け取りました。
序章
最近のWebアプリケーションは、タスクを実行するために他のサーバーと通信するのが一般的です。 たとえば、オンラインで本を購入できるWebアプリには、顧客注文サーバー、本の在庫サーバー、および支払いサーバー間の通信が含まれる場合があります。 この設計では、さまざまなサービスがWeb API(プログラムでデータを送受信できる標準形式)を介して通信します。 Node.js アプリでは、HTTPリクエストを行うことでウェブAPIと通信できます。
Node.jsには、httpとhttpsモジュールがバンドルされています。 これらのモジュールには、Node.jsプログラムがHTTPリクエストに応答できるように、HTTPサーバーを作成する機能があります。 また、他のサーバーにHTTPリクエストを送信することもできます。 この重要な機能により、Node.jsプログラマーは、Node.jsを使用して最新のAPI駆動型Webアプリケーションを作成できます。 コアモジュールであるため、使用するためにライブラリをインストールする必要はありません。
このチュートリアルでは、https
モジュールを使用して、テスト目的で偽の RESTAPIであるJSONプレースホルダーにHTTPリクエストを送信します。 まず、データを受信するための標準のHTTPリクエストであるGET
リクエストを作成します。 次に、ヘッダーを追加するなど、リクエストをカスタマイズする方法を確認します。 最後に、POST
、PUT
、および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はリクエストに追加するデータがまだあると見なすため、プログラムは完了しません。
nano
をCTRL+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の代わりに、host
とpath
の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つのオプション、host
、path
、method
、headers
について説明しました。 ]。 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
リクエストを作成します。 users
APIで新しいユーザーを作成するようにリクエストします。
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
リクエストに必要なものと一致させます。 また、method
をPOST
に更新しました。 最後に、オプション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.js
をnano
で開きます。
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でGET
、POST
、PUT
、およびDELETE
リクエストを作成しました。 ライブラリはインストールされていません。 これらの要求は、標準のhttps
モジュールを使用して行われました。 GET
リクエストはget()
関数で行うことができますが、他のすべてのHTTPメソッドはrequest()
メソッドを介して行われます。
あなたが書いたコードは、公開されているテストAPI用に書かれています。 ただし、リクエストの記述方法は、すべてのタイプのAPIで機能します。 APIについて詳しく知りたい場合は、APIトピックページをご覧ください。 Node.jsでの開発の詳細については、Node.jsシリーズのコーディング方法に戻ってください。