URL / URI Tools

URIテンプレート展開式ごとの結果を確かめる

テンプレートと変数JSONを入力し、URI全体と各式の展開部分を確認します。

URIテンプレート展開

URIテンプレート

変数JSON

テンプレートと変数はこのブラウザーで処理します。入力や結果のアドレスには接続しません。

展開後のURI

省略した変数:なし

未使用のJSONキー:なし

式ごとの詳細

1行、24列

{/version,resource}
  • 変数: version · 定義済み
  • 変数: resource · 定義済み

展開部分: /v1/search

1行、43列

{?q,page,tags*}
  • 変数: q · 定義済み
  • 変数: page · 定義済み
  • 変数: tags* · 定義済み

展開部分: ?q=hello%20world&page=2&tags=red&tags=blue

2個中2個を表示

展開の構文

RFC 6570 Level 4:{var}、{+var}、{#var}、{.var}、{/var}、{;var}、{?var}、{&var}。:nは接頭辞、*はリストやマップの展開です。

UTF-16単位の上限:テンプレート16,384、JSON 65,536、結果262,144。式は最大500個です。

式2個 · 省略変数0個 · 結果75単位

APIのパスを組み立てるとき、値の中のスラッシュを残すかどうかで参照先が変わります。URIテンプレート展開なら、文字列連結では見落としやすい予約文字の扱いを実際の値で確認できます。

RFC 6570の変数展開は、単に名前を置き換える仕組みではありません。値がリストかマップか、どの演算子を選ぶかによって区切り方も変わります。相対参照も受け付けるため、完全なURLを用意する必要はありません。

URIテンプレート展開で分かること

消えたパラメーターの原因を追う

URIテンプレート展開では式の位置と生成された部分を並べて表示します。変数が未指定、null、空のコレクションなら省略されます。空文字列は別の状態として表示されるため、入力の不足と空の値を区別できます。

色付きの変数が対応するテンプレートの枠にはまり、パスとクエリを組み立てる図。

星印の有無を比較する

{?tags}はリストをコンマ区切りの一つの値にします。{?tags*}なら各要素にtagsという名前を付けて繰り返します。マップの展開ではメンバーのキーを使うため、同じ星印でも値の種類が重要です。

上段では三つの項目を一つの値にまとめ、下段では独立した三つのクエリ項目に展開した図。

名前・値の型・更新時点を確認する

01

キーはそのまま指定する

user.idは階層をたどる記法ではなく、その名前のキーです。パーセントエンコードされた名前も復号しません。テンプレートとJSONで同じつづりを使用してください。

02

例を切り替えて演算子を調べる

予約文字の例ではパスのスラッシュ、複合値の例ではリスト、マップ、Unicodeの接頭辞を確認できます。読み込み前に置換内容を確認でき、適用後は入力と結果を一度だけ復元できます。

03

古い結果を持ち出さない

自動展開は編集後350ミリ秒で実行します。オフにするとボタンやCtrl/Cmd + Enterで実行できます。入力を変えるとコピーとダウンロードは無効になり、成功後に再び使えます。

文字の扱いから診断まで

四つのレベルに対応

URIテンプレート展開は通常の展開と+、#、.、/、;、?、&を扱います。:nは1〜9999文字の接頭辞、*はリストやマップに対応します。パーセントエンコーディングと区切り文字は演算子が決めます。

長い数値IDを丸めない

JSONの数値は元の表記を保ちます。9007199254740993のような整数も浮動小数点数に変換せず、-0や指数表記も書き換えません。真偽値はtrueまたはfalseとして展開します。

構文エラーと省略を区別

テンプレートとJSONの構文エラーには行と列を表示し、重複キーは拒否します。入れ子の値はJSON Pointerで場所を示します。未定義変数の省略は正常な処理なので、それだけで実行エラーにはしません。

調査用の情報をまとめて保存

コピーはURI文字列のみです。JSONレポートにはテンプレート、変数JSONの原文、全式の詳細、省略名と未使用キーを含めます。画面は50式ずつ表示しますが、保存するレポートに省略はありません。

展開前に知っておく制約

浅いJSONオブジェクトを使う
ルートはオブジェクトにしてください。値は文字列、数値、真偽値、null、スカラーのリストまたはマップです。未使用の値も含め、コンテナーの入れ子は拒否します。ファイル読み込みや変数セットの一括処理はありません。
空文字列には値がある
未指定、null、空コレクションは省略し、要素のnullも飛ばします。空文字列では{?x}が?x=、{;x}が;xになります。有効な変数JSONを指定していれば、空のテンプレート自体は処理できます。
名前と順序を維持する
大文字と小文字を区別します。ドットは階層を表さず、名前のパーセント列も復号・正規化しません。重複キーで後の値を採用することはなく、マップの順序はJSON原文に従います。
URLの補正は行わない
通常の展開は%も符号化し、+と#は有効なパーセント列と予約文字を残します。リテラルの空白は無効です。UnicodeはUTF-8で符号化し、文字の正規化、プロトコル補完、ホスト変換は行いません。
上限を超えたら出力を止める
UTF-16単位でテンプレート16,384、JSON 65,536、結果262,144、式数500が上限です。共通パーサーは深さ100、ノード50,000、数値トークン1,000文字まで。失敗した場合、以前の結果や途中の展開は書き出せません。
一方向の標準構文に限る
逆方向のルート照合、接続確認、リモート読み込み、既定値、条件式、スクリプト実行はありません。区切り文字はRFCで固定されています。特殊な組み立てが必要なら、変数側で文字列を準備してください。

URIテンプレート展開のよくある質問

URIテンプレートの波括弧はパーセントエンコードすべきですか?

式の波括弧はそのままにします。/users/{id}は変数を含みますが、/users/%7Bid%7Dは符号化済みのリテラルなので置換されません。テンプレート全体を先にURLエンコードせず、値の符号化は演算子に任せます。

RFC 6570の/演算子と他の接頭辞はどう違いますか?

/は定義された変数の前にスラッシュを加え、リストに*があれば各要素の前に加えます。通常の展開は値の中のスラッシュを符号化し、+はスラッシュを残しますが新たには追加しません。

RFC 6570では省略可能なパラメーターを空白で区切れますか?

任意の空白区切りを指定する演算子はありません。必要な単語を一つの文字列にして渡せば、空白は%20になります。リストを*で展開すると、選んだ演算子に従い/や&で区切られます。

RFC 6570のURIテンプレートを正規表現で検証できますか?

正規表現だけでは値の型まで判断できません。たとえば{items:3}は構文上正しくても、itemsがリストなら接頭辞を適用できません。このツールは式と変数を合わせて検証し、失敗位置を表示します。

URIテンプレートでURIとルートを照合できますか?

RFC 6570が定めるのは変数からURIへの展開です。複数変数、予約文字、マップの展開は元の値を一意に復元できない場合があります。本ページではURIからルート変数を抽出しません。

問題がありますか?

URIテンプレート展開を実際の値で試す

パスやクエリの例に変数を入れ、式ごとの結果を確認してレポートを保存してください。

一つのテンプレートと変数オブジェクトを、式ごとに確認できます。