【javascript】URLエンコードあれこれ


色んなAPIを使っているとPOSTで情報取得をするものもあります。

api keyなんかが必要な場合は仕方ないとして、どうでもいいパラメータをPOSTで送るものがREST APIと自称してて??となることも多々。

そんな中で躓くことの多いapplication/x-www-form-urlencodedのエンコードをどうするのがいいかなと試してみたので覚書き。

 

基本的にネストしたデータは送らないという前提で書いていきます。

階層化したデータを送る必要があるならapplication/jsonで送るかJSON.stringfyしたものを送るようになっているはず。きっとそう。

とはいえ必要な場面が来るかもしれないのでそれっぽいコードも書いておきます。

encodeURIComponent

昔からよく使う方法。

keys()encodeURIComponent()testJsonを指定してるのは使いにくいので、実用を考えると関数化するのがよさそう。

ものによってはkeyもエンコードが必要なこともあります。

URLSearchParams

スペースの扱い的にこちらの方が推奨されることが多い。

let使いたくないし手作業も嫌なのでObject.entries()Array.reduce()を使う。

URLSearchParams.append()URLSearchParamsを返せばさっぱりするのに。

少しきれいにするならこんな感じ。

ライブラリ

ライブラリが使える環境なら楽だし見た目にもわかりやすいです。

querystringなら配列を扱えますしqsなら階層化してようが問題ありません。

ただどちらもスペースが%20になるエンコード。

ネストされたデータ

使うことはないだろうけど一応URLSearchParamsで階層オブジェクトをエンコード。

深く考えず勢いで書いたけどqsでエンコードしたものの%20+に変わったものになったので一応あってそう。

それだけの違いならqsの結果をreplaceすればいいだけな気もしたけどまぁいいか。


コメントを残す

メールアドレスが公開されることはありません。