ReactでAPIリクエストをプロキシする / Proxy API request with React

dorayakikun
3 min readDec 19, 2018

--

TLDR

Reactアプリの開発中、Nginxなどを利用せずにAPIにプロキシする場合、package.jsonにproxyプロパティを追加することで解決できる。

モチベーション

docker-composeを利用して複数のコンテナ間を上手く連携したかった。
無策で以下のようなコードを書いた場合上手く動作しないです。

componentDidMount() {
fetch("/api/animals")
.then(res => res.json)
.then(json => setState({json}))
}

これは、リクエストの投げ先がReactアプリをホストしているドメインになってしまうためです。
本番環境ではNginxやApacheなどを利用して、リソースパス毎に振り分けをすれば良いのですが開発環境でそこまで用意するのは少し煩雑です。

解決策

Reactでは、リクエストの返り値が静的な資産でない場合、事前に設定したプロキシ先にプロキシする機能があります。
こちらを利用することで、任意の指定先にプロキシすることが可能です。
指定の方法は package.jsonproxy プロパティを追加するだけです。

{
...
"proxy": "http://localhost/9000",
...
}

proxy にはlocalホストだけでなく、docker-composeの links で指定した名前を指定することができます。( eg. http://express-api-server )
公式のドキュメントは下記となりますので、詳細が気になる方はこちらをご覧ください。

まとめ

マイクロサービスの流行もあって、細かくアプリケーションを分割する機会は今後増えていくと思います。
その時、今回のようなプロキシ設定を知っておくと開発環境の構築がぐっと容易になるのかなと考えています。
最後に自分が作成したサンプルプロジェクトのリンクを共有して結びとさせていただきます。

--

--

dorayakikun
dorayakikun

Written by dorayakikun

Flag of Japan he/him. Web Developer. A founder of the http://rust.tokyo . An organizer of http://RustFest.global . All my own views.

No responses yet