対策まとめJavaScriptのxhrライブラリについてのはなし最近、僕はだいたいReactを使ってフロントを書いており、どうしても必要なときをのぞいてjQueryを利用することは少なくなってきました。いうことでJavaScriptのajaxリクエストのためだけにjQueryのような巨大なライブラリをロードするのも馬鹿らしいので、isomorphicを意識した専用のライブラリを利用しています。最初はsuperagentを使ってましたけど、最近はPromiseベースのAPIの分かりやすさからaxiosを使ってます。若干ドキュメントが貧弱な感も否めませんが、まぁなんとかなるレベルです。流用する形で実装されています。FormValue形式による値のPOSTにしか対応していないようです。ドキュメントを参照してください。ここで問題が発生します。FormValueの形式でサーバーに値を送るので問題ないんですが、superagentやaxiosの場合、特に何も指定しない限りはRequestPayload本体にJSON形式で値を乗っけてPOSTします。しようとも期待する値はとれないということです。僕はイマイチここらへんの知見がうすいんですけど、階層の深いJSONをPOSTしたいときとかは、FormエレメントのシノニムにすぎないFormValueよりもRequestPayloadのほうが有利なわけで、現代的なライブラリはそちらが前提になっているんでしょう。あ、あと確かAngularJSのajaxリクエストもRequestPayload形式ですね。RequestPayloadに乗っけているJSONを取得するコードの例ひとまずgojiに渡すhandler形式を例にしますけど、net/httpに乗っかっているWAFであればどれも変わらないでしょう。"gaccha!")}とまぁこんな感じです。読み込んでJSONに変換してるだけです。コマンドもオプションによってはFormValueじゃなかった気がします。標準ライブラリのほうでいい感じに吸収してくれるAPI欲しいなーとおもったんですが、そもそも僕の解釈が正しいのかよとか、具体的な実装を考えると自前の構造体へのマッピングだとかの点で微妙っぽさが拭えないので妙案だしたいところですね。Railsとかをちゃんと使ったことがあんまりないわけで、他言語の有名ライブラリがここら辺をどういう風に実装しているのか気になってきました。いうかちょっと中途半端すぎないすかね。いいつつもここら辺は、各々が実装するサーバーのセキュリティ対策だとかにも関わってくるわけで、例えばgojiを使っているならばそれぞれがいい感じのmiddlewareを作ったりするしかないのかなーとおもいますね。POSTやPUTを受け取るたびに各ハンドラが毎回ヘッダをみてパースして......なんてやってらんないわけで、できれば(可能な形式であれば)FormValue形式でもBodyにJSONを埋め込む方式でもどちらでも受け取れるような雰囲気で実装できたら幸せ度高いとおもいます。それっぽい案がおもいついたらこのブログに追記しようかなとおもいます。まとめJSでrequestを送るときはライブラリの差異を考慮にいれるGo言語でJSONをPOST(PUTとかもだけど)するときは受け取る形式に気をつけたほうがよいGoでWebアプリを書くとちょいちょいライブラリや機能の点でかゆいところに手が届きにくくてめんどい気持ちになったりすることがあるいまいちGoの型システムを使いこなせていないのでもうちょっと頑張りたいこの記事の内容自体は半年前にハマってて、文章にせずに放置してたら最近またハマったのでこういうのはちゃんと文章にしたほうが良いニュービーなので何かしら勘違いがあるかもしれないですが、以上です。(id:hachibeechan)プログラミングのこととか、プログラミング以外のこととかについて書きなぐります。ここに書かれている内容は個人の日記レベルの内容であり、所属する組織の公式見解ではありません。何か御用の方はメールやツイッターのDMとかそういう感じでお願いします。blogに移行していきます。(1)おすすめ技術書オールタイムベストスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。