XML APIリクエストのContent-Type
APIにXMLデータを送信する際のContent-Typeヘッダーを設定します。application/xmlとtext/xmlの違い、charsetのベストプラクティスを解説します。
XML/SOAP
詳細な説明
XML Content-Type
APIにXMLデータを送信する際、推奨されるContent-Typeは明示的なcharset宣言付きのapplication/xmlです。
ヘッダー値
Content-Type: application/xml; charset=utf-8
application/xmlとtext/xmlの比較
| 特徴 | application/xml | text/xml |
|---|---|---|
| デフォルトcharset | UTF-8 | US-ASCII |
| バイナリ安全 | はい | いいえ(textサブタイプ) |
| 推奨元 | RFC 7303 | RFC 7303(注意付き) |
主な違い:charsetが指定されない場合、text/xmlはUS-ASCIIがデフォルトですが、application/xmlはXMLプロローグで宣言されたエンコーディング(<?xml encoding="..."?>)またはUTF-8がデフォルトです。これによりapplication/xmlは国際的なコンテンツにとってより安全です。
XMLプロローグとCharset
XMLプロローグもエンコーディングを宣言できます:
<?xml version="1.0" encoding="utf-8"?>
Content-Typeのcharsetとプロローグのエンコーディングの両方が存在する場合、text/xmlではContent-Typeのcharsetが優先され、application/xmlではプロローグが優先されます。
その他のXMLベースタイプ
| メディアタイプ | 用途 |
|---|---|
application/xhtml+xml |
XHTMLドキュメント |
application/rss+xml |
RSSフィード |
application/atom+xml |
Atomフィード |
image/svg+xml |
SVG画像 |
application/mathml+xml |
MathML |
curlの例
curl -X POST \
-H "Content-Type: application/xml; charset=utf-8" \
-d '<?xml version="1.0"?><request><action>query</action></request>' \
https://api.example.com/xml
ユースケース
REST API、RSS/Atomフィードプロセッサ、構造化XMLデータを期待するエンドポイントにXMLペイロードを送信する際に使用します。新しい実装ではtext/xmlよりapplication/xmlを優先してください。