【Python】Flask + MySQL + SQLAlchemyでAPIを開発してみよう Part1

2019.08.19

Pythonはじめました

 

 

こんにちは、せんだです。

 

暑さが厳しい今日この頃、みなさんはお元気にお過ごしでしょうか?

 

せんだはと言うと相変わらず毎日チャリ通です。この暑さだとなりふり構っていられないので、

保冷剤をタオルでくるんだものを首に巻いて出勤している状態です…

 

早く涼しい季節になって欲しい!

 

 

さて本題ですが、今回から数回に分けてPythonの軽量フレームワーク「Flask」を使ってAPIを作ってみたいと思います。

 

今回やること

  • Flaskインストール
  • ルーティング
  • レスポンス

 

では早速やっていきます ※今回はDB使いません

 

環境


 

端末:Mac Book Pro

Pythonバージョン: 3.6.8

Flaskバージョン: 1.0.3

MySQLバージョン: 5.7

SQLAlchemy バージョン:1.3.4

 

Flaskのインストール


 

最初に下記のコマンドでFlaskをインストールします。

1
$ pip install Flask

 

インストールしたら、ファイルを作っていきます。

今回は下記のようなディレクトリ構成でやっていこうと思います。app.pyが起動ファイルです。

api/__init__.pyに実際の処理を記述しています。

Flaskではモジュール分割の仕組みとしてblueprintという仕組みが準備されていますので、今回はそちらも使っています。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
app.py ... 起動ファイル
|
config.py ... 設定ファイル
|
api
├── __init__.py ... FlaskApp本体

├── database.py ... DB情報

├── models ... Model群
│   └── users.py

└── views  ... Controller群
    └── user.py

 

app.py

1
2
3
4
from api import app

if __name__ == '__main__':
  app.run()

 

api/__init__.py

1
2
3
4
5
6
7
8
9
10
11
from flask import Flask, make_response, jsonify
from .views.user import user_router

def create_app():

  app = Flask(__name__)
  app.register_blueprint(user_router, url_prefix='/api')

  return app

app = create_app()

 

ルーティング


 

続いてルーティングですが記述としては下記のようにパスとHTTPメソッドを指定します。

 

api/views/user.py

1
2
3
4
5
6
7
8
9
from flask import Blueprint, request, make_response, jsonify

# ルーティング設定
user_router = Blueprint('user_router', __name__)

# パスとHTTPメソッドを指定
@user_router.route('/users', methods=['GET'])
def get_user_list():
〜 処理 〜

 

レスポンス


 

json形式でレスポンスします。

 

api/views/user.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from flask import Blueprint, request, make_response, jsonify

# ルーティング設定
user_router = Blueprint('user_router', __name__)

# パスとHTTPメソッドを指定
@user_router.route('/users', methods=['GET'])
def get_user_list():

  return make_response(jsonify({
    'users': [
       {
         'id': 1,
         'name': 'John'
       }
     ]
  }))

 

確認


 

ここまで記述したら、実際にスクリプトを起動して動作確認してみてください。

1
$ python app.py

 

curlでリクエストを送って、下記のようにjsonが表示されたらOKです。

1
2
3
4
5
6
7
8
9
$ curl http://127.0.0.1:5000/api/users
{
  "user": [
   {
     "id": 1,
     "name": "John"
   }
  ]
}

 

 

まとめ

いかがでしたか?こんな感じでFlaskを使って簡単にAPIのベースが作れました。

次回はDBと連携させるところを作る予定です

 

それでは、また次回!

 

 

 

Flask + MySQL + SQLAlchemyシリーズ


Top