APIのリクエストを送信する時、Content-typeをappliation/jsonに指定することが多いのですが、時にはapplication/x-www-form-urlencodedに指定してデータを送信する必要があります。
application/x-www-form-urlencodedはContent-typeの一種だと分かっていますが、それはどのように動いでいるのかが分からないユーザーが多くいます。そこで、本文では、application/x-www-form-urlencodedの詳細情報を皆さんに紹介した上、application/x-www-form-urlencodedでデータを送信してAPIにアクセスする方法を一緒に解説していきたいと思います。
Apidogは、APIの設計、テスト、仕様書生成及びモックサーバーなどにも対応可能なAPI管理ツールとして、非常に直感的なGUIでAPIに関わる作業を手軽にやり遂げます。個人向け完全無料ですが、誰でもApidogを制限なく利用することができます。無料で始めるには、下記のボタンから!👇👇👇
application/x-www-form-urlencodedとは
application/x-www-form-urlencodedは、HTMLフォームから送信されるデータをエンコードするためのContent-Type
の1つになります。Content-Type
とはヘッダーに入れるリクエスト本文の型を定義するためのものになります。
主な特徴は以下の通りです:
- フォームデータをキーと値のペアで表現します。
- キーと値は
=
記号で連結されます。 - キーと値はURLエンコーディング(percent-encoding)されます。これにより、特殊文字や空白を安全にエンコードできます。
- キーと値のペアは
&
記号で区切られます。 - コンテンツタイプヘッダーは
Content-Type: application/x-www-form-urlencoded
となります。
例えば、フォームにname
とemail
の入力欄があり、それぞれJohn Doe
とjohn@example.com
が入力された場合、以下のようにエンコードされます。
name=John%20Doe&email=john%40example.com
ブラウザはデフォルトでこのフォーマットを使用してフォームデータを送信します。サーバー側では、このデータを受信してデコードすることで、フォームの内容を読み取ることができます。
application/x-www-form-urlencodedの仕様
上記の説明から、大抵application/x-www-form-urlencodedの主な仕様が分かるようになるのでしょう。上記の情報を踏まえて、次は、application/x-www-form-urlencodedの詳細仕様を解説していきたいと思います。
文字エンコーディング
- アルファベット、数字、ハイフン(-)、アンダースコア(_)、ピリオド(.)はエンコードしない
- その他の文字はPercent Encodingでエンコードする。例:スペースは %20
キーと値のエンコーディング
- キーと値は等号(
=
)で連結する - キーと値に使用できる文字はアルファベット、数字、ハイフン、アンダースコア、ピリオド
- その他の文字はPercent Encodingでエンコードする
キーと値の区切り
- アンパサンド(
&
)でキーと値を区切る &
自体は%26とエンコードする
キーの並び順
- キーの並び順は指定されていない
長さの制限
- ブラウザやサーバーによって異なるが、通常2048字程度
Content-type
- Content-typeは
application/x-www-form-urlencoded
文字エンコーディング
- デフォルトはUTF-8
この仕様に従うことで、フォームデータを安定した形式で送受信できます。サーバー側でもこの仕様に対応することが重要です。
application/x-www-form-urlencodedとURLパラメータ
多くのユーザーは、application/x-www-form-urlencodedのフォーマットは、URLパラメータに似ているのではないかという疑問を抱いているかもしれません。確かに両者のフォーマットは非常に似ています。
例えば、共通の特徴は以下のような点です:
- キーと値のペアでデータを表現する
- キーと値は等号(=)で連結する
- アンパサンド(&)でペアを区切る
- 値はURLエンコードされる
- キーの並び順は任意
例えば、以下はapplication/x-www-form-urlencodedの例です:
key1=value1&key2=value2
以下は対応するURLパラメータの例です:
?key1=value1&key2=value2
非常に似たフォーマットになっています。ただし、細かな違いはあります。
- URLパラメータは必ず「?」から始まる
- URLパラメータの方が文字数制限がある
などの点で若干異なります。
しかし、基本的な構造とエンコーディングの仕組みはほぼ同じです。このため、データの表現方法としては非常に似通ったフォーマットだと言えます。
application/x-www-form-urlencodedとJSONの違い
通常、APIにアクセスしようと思っている場合、APIサーバー側が定義しているデータ送信の形式に従わないといけません。現在大部のAPIでは、JSONの利用が主流になっていて、application/x-www-form-urlencodedがそんなに多く使用されていません。そこで、この部分では、application/x-www-form-urlencodedとJSONの違いを皆さんに紹介しようと思います。
形式の違い
- application/x-www-form-urlencodedはキーと値のペアの形式
- JSONはオブジェクトや配列で階層的なデータ構造を表現
拡張性の違い
- application/x-www-form-urlencodedはフラットなデータ
- JSONは階層化して複雑なデータも表現できる
データ型の違い
- application/x-www-form-urlencodedはテキストのみ
- JSONは数値、真偽値、nullなど多様なデータ型が利用できる
解析のしやすさ
- application/x-www-form-urlencodedはパースしなければ内容が分からない
- JSONは人間にも読みやすい形式
データ量の違い
- JSONの方が圧縮率が高く、データ量を減らせる
国際化のしやすさ
- JSONはUnicode対応なので多言語に対応しやすい
セキュリティの違い
- JSONは構造が見えにくいのでセキュリティ面で有利
上記の内容から、application/x-www-form-urlencodedはシンプルなキーと値のみの表現に限られることがわかると思います。したがって、複雑なデータ構造を扱うWeb APIではJSONの方が適していると言えます。後方互換性など特別な理由がない限り、JSONを利用するのが一般的です。
x-www-form-urlencoded形式でリクエストを送信
APIテスト時に、APIサーバーが要求するデータ形式を利用してデータを送信する必要があります。そうしないと、正確にAPIにアクセスすることができません。それでは、APIのリクエストを送信する場合は、どうやってx-www-form-urlencoded形式で送信すればいいのでしょうか?
Apidogは、非常に使いやすいAPIクライアントツールとして、GUIで楽にAPIにアクセスできます。次のように、APIリクエストを送信する前に、GUIで簡単にx-www-form-urlencoded形式で送信するデータを指定することができます。

このように、ApidogでAPIのリクエストを送信する場合、「Body」タブを切り替えて「x-www-form-urlencoded」を選択すると、content-type=application/x-www-form-urlencodedという項目が自動的にHeaderに追加されます。そして、この画面で、送信したいデータをGUIで直感的に記入可能ですので、非常に便利です。
まとめ
本文では、application/x-www-form-urlencodedというコンテンツタイプを詳しく皆さんに紹介しました。application/x-www-form-urlencoded形式でAPIリクエストを簡単に送信するために、Apidogという使いやすいツールを利用することがおすすめです。
ApidogはGUIベースで操作性が高いAPIテストツールです。リクエストのBodyタブで「x-www-form-urlencoded」を選択するだけで、簡単にその形式での送信ができますので、ぜひお試しください。