<commit_before>---
layout: post
title: "Python と Flask で RESTful API を開発する"
metatitle: "Python と Flask で RESTful API を開発する"
description: "Python と Flask で RESTful API を開発する方法を学びましょう。"
metadescription: "Python と Flask で RESTful API を開発する方法を学びましょう。"
date: 2017-09-28 15:29
category: Technical Guide, Python
author:
  name: "<NAME>"
  url: "https://twitter.com/brunoskrebs"
  mail: "<EMAIL>"
  avatar: "https://www.gravatar.com/avatar/76ea40cbf67675babe924eecf167b9b8?s=60"
design:
  bg_color: "#4A4A4A"
  image: https://cdn.auth0.com/blog/python-restful/logo.png
tags:
- python
- flask
- restful
related:
- jp-angular-2-authentication
- jp-reactjs-authentication
lang: ja
alternate_locale_en: angular-2-authentication
---

**TL;DR：** 本書では Flask や Python を使って RESTful API を開発していきます。まず、静的データ（ディクショナリ）を返すエンドポイントを作成しましょう。後で、2 つの専門分野といくつかのエンドポイントでクラスを作成し、これらクラスのインスタンスを挿入・取得します。最後に、Docker コンテナ上で API を実行する方法を見ていきます。[最終コードは本書の至るところで開発されており、この GitHub レポジトリで見つけることができます](https://github.com/auth0-blog/flask-restful-apis)。どうぞ、お楽しみください！

{% include tweet_quote.html quote_text="Flask は Python 開発者による軽量 RESTful API の作成を可能にします。" %}

## 要約

本書は次の章に分かれています。

1. Python をなぜ使用するか？
2. Flask をなぜ使用するか？
3. Flask アプリケーションをブートストラップする
4. Flask で RESTful エンドポイントを作成する
5. Python クラスでモデルをマッピングする
6. オブジェクトを Marshmallow でシリアル化や逆シリアル化する
7. Flask アプリケーションを Docker 化する
8. Auth0 で Python API をセキュアにする
9. 次のステップ

## Python をなぜ使用するか？

最近、Python を使ってアプリケーションを開発するのが人気になっています。[最近の StackOverflow の分析によると](https://stackoverflow.blog/2017/09/06/incredible-growth-python/)、Python は最も急成長しているプログラミング言語のひとつで、プラットフォーム上で質問される数では Java さえも超えています。GitHub 上ではこの言語は大幅な導入の兆候が示され、[2016 年に開かれたプル要求](https://octoverse.github.com/) の数では第三位を占めます。

![Stack Overflow Trends showing Python growth](https://cdn.auth0.com/blog/python-restful/trends.jpg)

Python のまわりで形成される巨大なコミュニティは言語のあらゆる面を改善しています。増々多くのオープンソースライブラリがリリースされ、[人工知能](https://github.com/aimacode/aima-python)、[機械学習](https://github.com/rasbt/python-machine-learning-book)、[Web 開発](https://github.com/pallets/flask)などさまざまなサブジェクトに対処しています。コミュニティ全体が大きな支援を受けているほかに、[Python ソフトウェア財団も優れたドキュメントを提供し](https://docs.python.org/3/)、 新規採用者たちがその本質を素早く学ぶことができます。

## Flask をなぜ使用するか？

Python での Web 開発に関しては、広く用いられるフレームワークが 2 つあります。[Django](https://github.com/django/django) と [Flask](https://github.com/pallets/flask) です。Django の方が古く、より成熟しており、その人気も少し上です。GitHub 上ではこのフレームワークは 28,000 ほどのスター、1,500 の貢献者、170 未満のリリース、 11,000 以上のフォークを獲得しています。StackOverflow 上では Django に関係する質問がひと月におよそ 1.2% 投稿されています。

Flask の人気は低いですが、いい勝負です。GitHub 上では Flask は 30,000 近くのスター、445 未満の貢献者、21 未満のリリース、 10,000 近くのフォークを獲得しています。StackOverflow 上では Flask に関係する質問がひと月に 0.2% 投稿されています。

Django の方が古いですが、コミュニティは若干大きく、Flask には強味があります。Flask はスケーラビリティとシンプルさを念頭に置いて一から作られました。Flask アプリケーションは主に Django の対応部分と比較されるとき、軽量なことでよく知られます。Flask デベロッパーはこれをマイクロフレームワークと呼び、マイクロ（[説明はこちら](http://flask.pocoo.org/docs/0.12/foreword/#what-does-micro-mean)）は、目標はコアをシンプルでかつ拡張可能にすることを意味します。Flask はどのデータベースを使用するか、どのテンプレート エンジンを選択するかなどの決定はしません。最後に、Flask にも[広範囲なドキュメンテーション](http://flask.pocoo.org/docs/0.12/) があり、開発者が学び始める必要がある要素全てに対処しています。

軽量、導入簡単、充実したドキュメンテーション、高い人気の Flask は RESTful API を開発する上で非常に良いオプションです。

## Flask アプリケーションをブートストラップする

何よりもまず、開発コンピューターに依存関係をインストールする必要があります。基本的に、インストールする必要があるものは [Python 3](https://docs.python.org/3/) 、[Pip (Python Package Index)](https://pypi.python.org/pypi/pip)、 [Flask](http://flask.pocoo.org/) です。幸運なことに、これら依存関係をインストールするプロセスは非常にシンプルです。

### Python 3 をインストールする

人気の高い Linux ディストリビューション(Ubuntu)の最新バージョンを使用するのであれば、すでにコンピューターに Python 3 をインストールしている可能性があります。Windows を実行するのであれば、このオペレーションシステムはバージョンをまったく発送しないので[おそらく Python 3 をインストールする必要があります](https://www.python.org/downloads/windows/)。Python 2 は Mac OS にデフォルトでインストールされており、[Python 3 を自分でインストール](http://docs.python-guide.org/en/latest/starting/install3/osx/) する必要があります。

マシンに Python 3 をインストールした後、以下のコマンドを実行して予定どおりにすべてが設定されているかを確認します。

================== CODE BLOCK 1

上記のコマンドは、異なる Python バージョンを使う場合は異なる出力を生成する可能性がありますのでご注意ください。重要なことは、出力は Python 3 で始まり、Python 2 でないことです。後者が出た場合は、python3 --version の発行を試すことができます。このコマンドが正しい出力を生成すれば、本書の至る所ですべてのコマンドを置換しなければなりません。

### Pip をインストールする

[Pip は Python パッケージをインストールするための推奨ツールです。[公式のインストールのページ](https://pip.pypa.io/en/stable/installing/) には、 Python 2 \&gt;= 2.7.9 または Python 3 \&gt;= 3.4 を使用するのであれば pip はすでにインストールされていると記載されていますが、apt を通して Ubuntu に Python をインストールすることは pip をインストールすることではありません。よって、別に pip をインストール必要があるか、またはすでにそれがあるかを確認しましょう。

================== CODE BLOCK 2

上記のコマンドが pip 9.0.1 .... (python 3.X) と同様の出力を生成すれば、用意ができました。pip 9.0.1 ...(python 2.X) を取得すれば、pip と pip3 の置換を試すことができます。コンピュータで Python 3 の Pip を見つけることができなければ、[Pip をインストールするにはこちら](https://pip.pypa.io/en/stable/installing/) の手順に従います。

### Flask をインストールする

Flask についてやその機能についてはすでに知っていますので、それをコンピュータにインストールすることやベーシックな Flask アプリケーションを実行できるかを見てみましょう。最初のステップは pip を使って次のように Flask をインストールします。

================== CODE BLOCK 3

そのパッケージをインストールした後、hello.py と呼ばれるファイルを作成し、それにコード行を 5 つ追加します。Flask が正しくインストールされているかを確認するためにこのファイルを使用するので、新規ディクショナリにそれをネストする必要はありません。

================== CODE BLOCK 4

これら 5 つのコード行は HTTP 要求を処理するために必要なもので、「世界の皆さん、こんにちは！」というメッセージを返します。それを実行するには、FLASK\_APP と呼ばれる環境変数をエクスポートする必要があり、それから次のように flask を実行します。

================== CODE BLOCK 5

Flask を直接実行するには Ubuntu 上で、`$PATH` 変数を編集する必要があるかもしれません。そのためには、`touch ~/.bash_aliases` を実行してから `echo "export PATH=$PATH:~/.local/bin" >> ~/.bash_aliases` を実行しましょう。

これらのコマンドを実行した後、ブラウザを開けて `http://127.0.0.1:5000/` に移動するか、`curl http://127.0.0.1:5000/` を発行してアプリケーションに到達します。

================== IMAGE 2

### 仮想環境（virtualenv）

PyPA（[Python Packaging Authority 団体](https://www.pypa.io/en/latest/)）は Python をインストールするツールとして `pip` を勧めていますが、プロジェクトの依存関係を管理するには別のパッケージを使う必要があります。`pip` は [`requirements.txt` ファイルを介するパッケージ管理](https://pip.pypa.io/en/stable/user_guide/#requirements-files) をサポートしますが、このツールはさまざまな製品や開発コンピュータで実行するために、重大なプロジェクトで使用する一部の機能が欠けています。その問題の中で、最大の問題原因となるものは次のとおりです。<commit_msg>added images<commit_after>---
layout: post
title: "Python と Flask で RESTful API を開発する"
metatitle: "Python と Flask で RESTful API を開発する"
description: "Python と Flask で RESTful API を開発する方法を学びましょう。"
metadescription: "Python と Flask で RESTful API を開発する方法を学びましょう。"
date: 2017-09-28 15:29
category: Technical Guide, Python
author:
  name: "<NAME>"
  url: "https://twitter.com/brunoskrebs"
  mail: "<EMAIL>"
  avatar: "https://www.gravatar.com/avatar/76ea40cbf67675babe924eecf167b9b8?s=60"
design:
  bg_color: "#4A4A4A"
  image: https://cdn.auth0.com/blog/python-restful/logo.png
tags:
- python
- flask
- restful
related:
- jp-angular-2-authentication
- jp-reactjs-authentication
lang: ja
alternate_locale_en: angular-2-authentication
---

**TL;DR：** 本書では Flask や Python を使って RESTful API を開発していきます。まず、静的データ（ディクショナリ）を返すエンドポイントを作成しましょう。後で、2 つの専門分野といくつかのエンドポイントでクラスを作成し、これらクラスのインスタンスを挿入・取得します。最後に、Docker コンテナ上で API を実行する方法を見ていきます。[最終コードは本書の至るところで開発されており、この GitHub レポジトリで見つけることができます](https://github.com/auth0-blog/flask-restful-apis)。どうぞ、お楽しみください！

{% include tweet_quote.html quote_text="Flask は Python 開発者による軽量 RESTful API の作成を可能にします。" %}

## 要約

本書は次の章に分かれています。

1. Python をなぜ使用するか？
2. Flask をなぜ使用するか？
3. Flask アプリケーションをブートストラップする
4. Flask で RESTful エンドポイントを作成する
5. Python クラスでモデルをマッピングする
6. オブジェクトを Marshmallow でシリアル化や逆シリアル化する
7. Flask アプリケーションを Docker 化する
8. Auth0 で Python API をセキュアにする
9. 次のステップ

## Python をなぜ使用するか？

最近、Python を使ってアプリケーションを開発するのが人気になっています。[最近の StackOverflow の分析によると](https://stackoverflow.blog/2017/09/06/incredible-growth-python/)、Python は最も急成長しているプログラミング言語のひとつで、プラットフォーム上で質問される数では Java さえも超えています。GitHub 上ではこの言語は大幅な導入の兆候が示され、[2016 年に開かれたプル要求](https://octoverse.github.com/) の数では第三位を占めます。

![Stack Overflow Trends showing Python growth](https://cdn.auth0.com/blog/python-restful/trends.jpg)

Python のまわりで形成される巨大なコミュニティは言語のあらゆる面を改善しています。増々多くのオープンソースライブラリがリリースされ、[人工知能](https://github.com/aimacode/aima-python)、[機械学習](https://github.com/rasbt/python-machine-learning-book)、[Web 開発](https://github.com/pallets/flask)などさまざまなサブジェクトに対処しています。コミュニティ全体が大きな支援を受けているほかに、[Python ソフトウェア財団も優れたドキュメントを提供し](https://docs.python.org/3/)、 新規採用者たちがその本質を素早く学ぶことができます。

## Flask をなぜ使用するか？

Python での Web 開発に関しては、広く用いられるフレームワークが 2 つあります。[Django](https://github.com/django/django) と [Flask](https://github.com/pallets/flask) です。Django の方が古く、より成熟しており、その人気も少し上です。GitHub 上ではこのフレームワークは 28,000 ほどのスター、1,500 の貢献者、170 未満のリリース、 11,000 以上のフォークを獲得しています。StackOverflow 上では Django に関係する質問がひと月におよそ 1.2% 投稿されています。

Flask の人気は低いですが、いい勝負です。GitHub 上では Flask は 30,000 近くのスター、445 未満の貢献者、21 未満のリリース、 10,000 近くのフォークを獲得しています。StackOverflow 上では Flask に関係する質問がひと月に 0.2% 投稿されています。

Django の方が古いですが、コミュニティは若干大きく、Flask には強味があります。Flask はスケーラビリティとシンプルさを念頭に置いて一から作られました。Flask アプリケーションは主に Django の対応部分と比較されるとき、軽量なことでよく知られます。Flask デベロッパーはこれをマイクロフレームワークと呼び、マイクロ（[説明はこちら](http://flask.pocoo.org/docs/0.12/foreword/#what-does-micro-mean)）は、目標はコアをシンプルでかつ拡張可能にすることを意味します。Flask はどのデータベースを使用するか、どのテンプレート エンジンを選択するかなどの決定はしません。最後に、Flask にも[広範囲なドキュメンテーション](http://flask.pocoo.org/docs/0.12/) があり、開発者が学び始める必要がある要素全てに対処しています。

軽量、導入簡単、充実したドキュメンテーション、高い人気の Flask は RESTful API を開発する上で非常に良いオプションです。

## Flask アプリケーションをブートストラップする

何よりもまず、開発コンピューターに依存関係をインストールする必要があります。基本的に、インストールする必要があるものは [Python 3](https://docs.python.org/3/) 、[Pip (Python Package Index)](https://pypi.python.org/pypi/pip)、 [Flask](http://flask.pocoo.org/) です。幸運なことに、これら依存関係をインストールするプロセスは非常にシンプルです。

### Python 3 をインストールする

人気の高い Linux ディストリビューション(Ubuntu)の最新バージョンを使用するのであれば、すでにコンピューターに Python 3 をインストールしている可能性があります。Windows を実行するのであれば、このオペレーションシステムはバージョンをまったく発送しないので[おそらく Python 3 をインストールする必要があります](https://www.python.org/downloads/windows/)。Python 2 は Mac OS にデフォルトでインストールされており、[Python 3 を自分でインストール](http://docs.python-guide.org/en/latest/starting/install3/osx/) する必要があります。

マシンに Python 3 をインストールした後、以下のコマンドを実行して予定どおりにすべてが設定されているかを確認します。

================== CODE BLOCK 1

上記のコマンドは、異なる Python バージョンを使う場合は異なる出力を生成する可能性がありますのでご注意ください。重要なことは、出力は Python 3 で始まり、Python 2 でないことです。後者が出た場合は、python3 --version の発行を試すことができます。このコマンドが正しい出力を生成すれば、本書の至る所ですべてのコマンドを置換しなければなりません。

### Pip をインストールする

[Pip は Python パッケージをインストールするための推奨ツールです。[公式のインストールのページ](https://pip.pypa.io/en/stable/installing/) には、 Python 2 \&gt;= 2.7.9 または Python 3 \&gt;= 3.4 を使用するのであれば pip はすでにインストールされていると記載されていますが、apt を通して Ubuntu に Python をインストールすることは pip をインストールすることではありません。よって、別に pip をインストール必要があるか、またはすでにそれがあるかを確認しましょう。

================== CODE BLOCK 2

上記のコマンドが pip 9.0.1 .... (python 3.X) と同様の出力を生成すれば、用意ができました。pip 9.0.1 ...(python 2.X) を取得すれば、pip と pip3 の置換を試すことができます。コンピュータで Python 3 の Pip を見つけることができなければ、[Pip をインストールするにはこちら](https://pip.pypa.io/en/stable/installing/) の手順に従います。

### Flask をインストールする

Flask についてやその機能についてはすでに知っていますので、それをコンピュータにインストールすることやベーシックな Flask アプリケーションを実行できるかを見てみましょう。最初のステップは pip を使って次のように Flask をインストールします。

================== CODE BLOCK 3

そのパッケージをインストールした後、hello.py と呼ばれるファイルを作成し、それにコード行を 5 つ追加します。Flask が正しくインストールされているかを確認するためにこのファイルを使用するので、新規ディクショナリにそれをネストする必要はありません。

================== CODE BLOCK 4

これら 5 つのコード行は HTTP 要求を処理するために必要なもので、「世界の皆さん、こんにちは！」というメッセージを返します。それを実行するには、FLASK\_APP と呼ばれる環境変数をエクスポートする必要があり、それから次のように flask を実行します。

================== CODE BLOCK 5

Flask を直接実行するには Ubuntu 上で、`$PATH` 変数を編集する必要があるかもしれません。そのためには、`touch ~/.bash_aliases` を実行してから `echo "export PATH=$PATH:~/.local/bin" >> ~/.bash_aliases` を実行しましょう。

これらのコマンドを実行した後、ブラウザを開けて `http://127.0.0.1:5000/` に移動するか、`curl http://127.0.0.1:5000/` を発行してアプリケーションに到達します。

![Hello world with Flask](https://cdn.auth0.com/blog/python-restful/hello-world.jpg)

### 仮想環境（virtualenv）

PyPA（[Python Packaging Authority 団体](https://www.pypa.io/en/latest/)）は Python をインストールするツールとして `pip` を勧めていますが、プロジェクトの依存関係を管理するには別のパッケージを使う必要があります。`pip` は [`requirements.txt` ファイルを介するパッケージ管理](https://pip.pypa.io/en/stable/user_guide/#requirements-files) をサポートしますが、このツールはさまざまな製品や開発コンピュータで実行するために、重大なプロジェクトで使用する一部の機能が欠けています。その問題の中で、最大の問題原因となるものは次のとおりです。
{'fraction_non_alphanumeric': 0.1275436355896126, 'fraction_numerical': 0.027756492124308217, 'mean_word_length': 7.420071684587813, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 11, 'https://': 41, 'lorem ipsum': 0, 'www.': 6, 'xml': 0}, 'pii_count': 4, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '378002', 'n_tokens_mistral': 8448, 'n_tokens_neox': 7348, 'n_words': 746}