responder入門

# この章の目標
**推定読了時間:** <font color="red">5分〜15分</font>

- responderとは何かを学ぶ
- responderを使って簡単なWeb APIやWebページを開発する

# はじめに

このテキストでは、次の環境で動作させております。
- Mac OS X Sierra(バージョン10.126)
- Jupyter Notebook
- Python3.7

上記以外の開発環境や、Windowsなどの環境の場合、動作しない場合がございますのご了承ください。
何かあれば[kazu (AI Academy今なら無料)](https://twitter.com/tankazunori0914)にDMください。

また、今後もこの記事を更新していく予定です。


# responderとは

[responder](https://github.com/kennethreitz/responder)とはPythonのWebアプリケーションフレームワークです。
responderの特徴として、**非同期処理が簡単に記述できる**点と、**GraphQL APIが簡単に書ける**点などが挙げられます。
また、[requests](http://docs.python-requests.org/en/master/)やpipenvなどの開発者である [Kenneth Reitz](https://github.com/kennethreitz) が開発し、2018年10月に公開して僅か2ヶ月ほどでGithubのStarが2000以上もついており、勢いのある点からも注目です。
pythonのWebアプリケーションフレームワークで人気があるのは、DjangoやFlaskなどが有名ですが、githubの**The Basic Idea**には次のような記載がされています。

```
The primary concept here is to bring the niceties that are brought forth from both Flask and Falcon and unify them into a single framework, along with some new ideas I have.
```

記載がある通り、responderは、FlaskとFalconの良さを1つにまとめ、幾つかのアイディアを加えたものがresponderとのことです。

# responderのインストール


Macの方はターミナル、Windowsの方はコマンドプロンプトを開いて、次のpipコマンドによりインストールが可能です。

```
pip install starlette==0.8
```

```
pip install responder 
```

Jupyter NotebookやGoogle Colabをご利用の方は、セル内の先頭に!をつけて次のように実行することで、Notebook内でインストールが可能です。

```
!pip install starlette==0.8
```

```
!pip install responder 
```

# responderを動かしてみる

次のプログラムを記述し、実行して見てましょう。

```python
import responder 

api = responder.API()

@api.route("/hello/{who}")
def say_hello(req, resp, *, who):
    params = req.params.get("id", "")
    resp.headers["X-Pizza"] = "42"
    resp.status_code = 200
    resp.media = {
      "Hello": who,
      "param": params
    }
    
if __name__ == '__main__':
    api.run()
```

実行できましたでしょうか？
次のURLにアクセスして見ましょう。

[http://127.0.0.1:5042/hello/aiacademy?id=1](http://127.0.0.1:5042/hello/aiacademy?id=1)


<img width="575" alt="スクリーンショット 2018-12-03 23.50.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/195675/54d1280f-c8f1-3ed5-20c3-a966e3f27ca1.png">


# シングルページWeb

シングルページのWebアプリケーションを作る場合は、**api.add_route("/", static=True)**を記述します。
templatesを使うため、jinja2をインストールしておきましょう。

```
pip install jinja2
```



```python
import responder
api = responder.API()

@api.route("/")
async def hello(req, resp):
    resp.text = api.template('index.html')


if __name__ == '__main__':
    # api.run()
    api.run(port=8080)
```

上記pythonプログラムと同じ場所に、下記index.htmlを作成し、staticフォルダに配置し、上記プログラムを実行して見ましょう。

```templates/index.html
<h1>Hello, responder!</h1>
```

<img width="419" alt="スクリーンショット 2018-12-04 0.33.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/195675/766390cf-b8b1-d91e-dea3-b356823adcf6.png">

# 最後に

今回は、今最も勢いあるpythonのWebアプリケーションフレームワークであるresponderを、簡単に説明しました。まだまだ多くのことが出来ますので、引き続き是非試して見てください。そして[AI Academy](https://aiacademy.jp/texts/#api)ではWebアプリ開発も学べますので、この機会にFlaskやDjangoも勉強して見てください。


# この記事を書いた人

![37741205_1003841679788059_2705403151040643072_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/195675/a4bad386-6700-4b9e-6a33-368a92c7ae6c.jpeg)

サイバーブレイン株式会社
代表取締役CEO　谷 一徳 

フォローお待ちしております！
[Twitter](https://twitter.com/tankazunori0914)
[Facebook](https://www.facebook.com/takazunori)


2000名以上が参加しいてるAIコミュニティも運営しております。
毎日AIに関する情報を提供しておりますので、こちらのご参加もお待ちしております！
[人工知能研究コミュニティ](https://www.facebook.com/groups/1892746874314837/)

# その他記事

[【保存版・初心者向け】独学でAIエンジニアになりたい人向けのオススメの勉強方法](https://qiita.com/tani_AI_Academy/items/4da02cb056646ba43b9d)

[【保存版・初心者向け】僕が本気でオススメするPythonと機械学習の良書12選](https://qiita.com/tani_AI_Academy/items/625915dc034a6993d521)

[【保存版・初心者向け】Python 目的別チュートリアル](https://qiita.com/tani_AI_Academy/items/3edc5effeb386ae3caa9)