HTTPリクエストでは、multipart/form-dataは非常に汎用されている送信データフォーマットになります。multipart/form-dataは通常、クライアントとサーバーとの間、フォームデータを送信するために利用されることが多くなります。本文では、multipart/form-dataというContent-Typeを紹介した上、multipart/form-dataを利用してデータを送信する方法を皆さんに紹介します。
multipart/form-dataとは
multipart/form-dataは、フォームデータを送信するときに使われる、HTTPリクエストのContent-Typeです。主にファイルアップロードの際に使用されます。
通常のフォームデータ送信では、application/x-www-form-urlencoded が使われますが、これはテキストデータのみを扱えます。一方、multipart/form-data はテキストデータに加えてファイルデータも送信できるため、ファイルアップロードに適しています。
multipart/form-dataとapplication/x-www-form-urlencoded
multipart/form-data と application/x-www-form-urlencoded はどちらもフォームデータを送信するために使われますが、以下の点で大きく異なります。
1. データの種類
application/x-www-form-urlencodedはテキストデータのみを送信できます。multipart/form-dataはテキストデータだけでなく、ファイルデータも送信できます。
⒊データのエンコーディング方式
application/x-www-form-urlencodedではスペースなどの特殊文字が%20のようにエンコードされます。multipart/form-dataではデータはエンコードされずに送信されます。
3. リクエストのフォーマット
application/x-www-form-urlencodedのリクエストボディはkey=value&key=value...の形式です。multipart/form-dataのリクエストボディは複数のパートに分かれ、各パートにデータが含まれています。ファイル送信時はファイル名やContent-Typeも指定できます。
4. ユースケース
application/x-www-form-urlencodedは一般的なフォームデータの送信に使われます。multipart/form-dataはファイルアップロードを伴うフォーム送信に使われます。
multipart/form-dataの利用ガイドとサンプル
multipart/form-data は、ファイルアップロードやフォーム送信で使用される HTTP リクエストの Content-Type です。このフォーマットは、テキストデータとバイナリデータの両方を含むことができます。
以下は、multipart/form-data の例です:
POST /upload HTTP/1.1
Host: example.com
Content-Type: multipart/form-data; boundary=---------------------------9051914041544843365972754766
Content-Length: 554
---------------------------9051914041544843365972754766
Content-Disposition: form-data; name="field1"
value1
---------------------------9051914041544843365972754766
Content-Disposition: form-data; name="field2"
value2
---------------------------9051914041544843365972754766
Content-Disposition: form-data; name="file"; filename="example.jpg"
Content-Type: image/jpeg
[...ファイルのバイナリデータ...]
---------------------------9051914041544843365972754766--
この例では、3つのフォームフィールドがあります:
field1: 値がvalue1field2: 値がvalue2file: ファイルexample.jpgのバイナリデータ
各フィールドは、boundary で区切られています。boundary は、データの区切り文字列で、リクエストの先頭で宣言されます。
バイナリデータを送信する場合は、Content-Disposition ヘッダーに filename パラメータを追加する必要があります。このヘッダーの後にバイナリデータが続きます。
multipart/form-data は、ファイルアップロードが必要な場合に使用されますが、単にフォームデータを送信する場合は、application/x-www-form-urlencoded フォーマットを使用することが一般的です。
Apidogでmultipart/form-dataを利用してデータを送信
それでは、HTTPリクエストを送信する場合、multipart/form-dataでデータを渡すために、どうしたらいいですか?ここで最も使いやすいAPI管理ツールのApidogを使って、multipart/form-dataでデータを渡し、簡単にリクエストを送信する方法を紹介します。
Apidogは、それを簡単に実現できます。Apidogは一番使いやすいAPIクライアントツールとして、APIテスト時に、簡単にHTTPボディを利用して、データを送信する必要があります。multipart/form-dataを利用する場合、各パラメータのContent-typeを指定したままでリクエストを送信することもできるので、非常に便利です。

上記画像のように、APIリクエストを送信する際、Bodyタブに切り替え、「form-data」でデータを記述する場合、各パラメータのContent-typeを指定することができます。
また、リクエストを送信すると、レスポンスで「実際のRequest」タブをクリックして、リクエストのクライアントコードを取得することができます。ここで、さまざまな言語での異なるクライアントのコードが自動的に生成されますので、このリクエストをプロジェクトに統合するのも非常に便利になります。
まとめ
multipart/form-dataは、HTTPリクエストでファイルやテキストデータを送信するためのContent-Typeです。主にファイルアップロードの際に使用されます。従来のapplication/x-www-form-urlencodedとは異なり、ファイルデータの送信が可能です。
multipart/form-dataを利用する際は、リクエストボディがパートに分かれ、各パートにデータが含まれる形式となります。ファイル送信時には、ファイル名やContent-Typeも指定できます。
Apidogという便利なAPIクライアントツールを使えば、multipart/form-dataによるデータ送信をGUIから簡単に行えます。パラメータのContent-Typeを指定しながらリクエストを作成でき、さまざまな言語のクライアントコードも自動生成されるため、実装が容易になります。
ファイルアップロードを伴うAPIの開発において、multipart/form-dataはデータ送信の標準的な方式として広く利用されています。適切なツールを使えば、開発の効率化が図れます。
