HTTPサーバーにデータを送信するときに、サーバーに保存や更新したいデータを送信するために、よくリクエストボディを使う必要があります。本文では、HTTPリクエストボディを詳しく解説した上、HTTPリクエストボディの使い方を皆さんに紹介します。
また、Apidogは完全無料で利用できるAPI管理ツールとして、無料バージョンを使っても制限なく使い回すことができますので、下記のボタンから完全無料でこのツールを利用しましょう。
HTTPリクエストボディとは
HTTPリクエストボディとは、HTTPリクエストメッセージの本文の部分のことで、クライアントがサーバーに送信したいデータを含めることができます。HTTPリクエストボディは、よくPOSTやPUTなどのリクエストメソッドで使用されます。
HTTPリクエストボディとヘッダーとの違い
HTTPリクエストヘッダーとリクエストボディのは、HTTPリクエストメッセージの本文の違う部分になります。両者の間、主な違いは次のような点があります。
位置の違い
- リクエストヘッダーはリクエストの先頭部分に配置される
- リクエストボディはリクエストヘッダーの後に配置される
内容の違い
- リクエストヘッダーはリクエストのメタデータを含む
- 例: ホスト名、Acceptエンコーディング、Cookie等
- リクエストボディはリクエストの本文データを含む
- 例: POSTデータ、ファイルアップロードデータ等
形式の違い
- リクエストヘッダーはキーと値の形式で記述される
- リクエストボディは任意のデータ形式(JSON、XML、バイナリ等)が利用できる
サイズの違い
- リクエストヘッダーは比較的小さいデータ
- リクエストボディは任意のサイズのデータが可能
利用方法の違い
- ほとんどのリクエストがリクエストヘッダーを利用する
- リクエストボディは必要な場合にのみ利用する
HTTPリクエストボディの形式について
上記で紹介したように、HTTPリクエストヘッダーで利用されるキーと値のペア形式とは異なり、HTTPボディで利用可能な形式がたくさんあります。次は、HTTPクリエストボディで利用可能な形式を簡単に紹介します。
application/x-www-form-urlencoded
HTMLのフォームから送信される標準的なエンコーディング形式。キーと値のペアを&で繋げてエンコードします。サンプルは次のようになります:
name=John&age=20
application/json
JSON形式のデータ。JavaScriptでの処理が容易なため、Web APIではよく利用されます。サンプルは次:
{"name":"John", "age":20}
application/xml
XML形式のデータ。構造化データの表現に適している形式になります。サンプルは次:
<user>
<name>John</name>
<age>20</age>
</user>
multipart/form-data
ファイルアップロードなどで利用されるマルチパート形式。ファイルとフォームデータを混在させることができます。サンプルは次:
--boundary
Content-Disposition: form-data; name="text"
hello
--boundary
Content-Disposition: form-data; name="file"; filename="data.txt"
Content-Type: text/plain
... file contents ...
--boundary--
application/octet-stream
application/octet-streamはバイナリデータをリクエストボディに設定する場合に使われるMIMEタイプです。
例えば、以下のように画像データをバイナリでエンコードし、リクエストボディに設定できます。
POST /upload HTTP/1.1
Host: example.com
Content-Type: application/octet-stream
Content-Length: 1226
FFD8FFE000104A46494600010101006000600000FFDB004300080606070605080707070909080A0C140D0C0B0B0C
1912130F141D1A1F1E1D1A1C1C20242E2720222C231C1C2837292C30313434341F27393D38323C2E333432FFDB00
43010909090C0B0C180D0D1832211C21323232323232323232323232323232323232323232323232323232323232
32323232323232323232323232323232323232FFC00011080080008003012200021101031101FFC4001F000001
0501010101010100000000000000000102030405060708090A0BFFC400B5100002010303020403050504040000
017D01020300041105122131410613516107227114328191A1082342B1C11552D1F02433627282090A1617183
... 以下略
このように実際のバイナリデータをリクエストボディにそのまま含めることができます。サーバー側ではContent-Typeヘッダーからapplication/octet-streamと判断し、リクエストボディをバイナリデータとして取り扱えば良いです。
text/plain
text/plain はリクエストボディにプレーンテキストのデータを設定する場合に利用する文字列で改行もサポートされます。
これはtext/plainのサンプルコメントです
改行も可能です
最近ではJSONやXMLの利用が多いですが、送信するデータの内容に合わせて適切な形式を選択する必要があります。
HTTPリクエストボディでデータを送信する方法
それでは、HTTPリクエストボディを使用して、データをサーバーに送信したい場合は、どうしたらいいですか?次は、一番使いやすいAPI管理ソフトを使って、HTTPリクエストボディにデータを入れて、サーバーに送信する方法を皆さんに紹介します。Apidogを使うと、直感的な操作によってノーコードでPOSTやPUTメソッドでリクエストボディのデータを送信できます。
ステップ⒈Apidogを開くと、APIのエンドポイントとHTTPメソッドなどの必要情報を記入して、「Body」タブに切り替えます。
ステップ⒉ここで、必要なデータ形式を選択して、適切なデータを記入します。
ステップ⒊「送信」ボタンをクリックして、リクエストを送信できます。ここでBodyに追加したデータもサーバーに送信して、レスポンスを取得できます。