Create, Read, Update, Deleteの書き方を理解してPythonの書き方を習得していく。
今回はflaskというフレームワークを使ってみる。Fast APIと迷ったけど、flaskのほうが手軽にできそうだったので今回はこれを選択。Fast APIはまた追々。
flaskを使ってapiをつくってみる。
Create, Read, Update, Delete、これら一連の動きができるかどうかを確認する。
flask
flaskは小規模向けの簡単なWebアプリが作れるフレームワーク。
まずは環境の構築から。
Pythonがインストールされているかを確認。
python --version
> Python *.**.*
このように返ってくるかを確認。
環境構築については省略。
次にflaskの環境をつくる。
ディレクトリを作成
mkdir python-crud
ファイルを作成
touch main.py
仮想環境を作成
python -m venv flaskapp
仮想環境を有効化する
source flaskapp/bin/activate
flaskをインストール
pip install Flask
仮想環境が有効化、立ち上がっている状態でファイルを動かす
export FLASK_APP=main
flask run
mainというのはmain.pyのファイル名です。
Running on http://***.*.*:****
こういうのが出るのでアクセスする。
ではAPIを作っていきます。
POSTMANやら、APIDOG(最近アプリ出たらしい)やら用意してたたいていきましょう。
flaskの基本設定を書いてAPIを実装していく。
from flask import Flask, jsonify, request
import logging
logも適宜出力しておくようにすると改修しやすい。
本の情報をgetする(Read)
# getメソッド
@app.route('/books', methods=['GET'])
def get_books():
return jsonify(books)
- /booksというURLにGETリクエストがきたとき全ての本の情報を返す
- jsonify関数で辞書形式で作成しているデータをjson形式で返す
POSTMANで以下URLでAPIをたたく, GETメソッド
http://127.0.0.1:5000/books
これもGETメソッド
# 特定の本をIDを通して取得する
@app.route('/books/<int:book_id>', methods=['GET'])
def get_book(book_id):
book = books.get(book_id)
if book:
return jsonify({book_id: book})
return {'error': '本が見つかりません'}, 404
- GETリクエストが来た時に特定のIDの本情報を返す
使い方はこんなURL
http://127.0.0.1:5000/books/1
新しく本を作成する
# Createメソッド
@app.route('/books', methods=['POST'])
def create_book():
# 新規作成時に既存idの最大数に1を追加する
new_book = {
'id': len(books)+1,
'name': request.json['name'],
'email': request.json['email']
}
books[new_book['id']] = new_book
return jsonify(new_book), 201
解説は省略
このURLで使える, POSTメソッド
http://127.0.0.1:5000/books
&コードを参照してjson形式でデータを作成する
PUTメソッド。使えるURLは省略。
# Updateメソッド
@app.route('/books/<int:book_id>', methods=['PUT'])
def update_book(book_id):
book = books.get(book_id)
if book:
book['name']=request.json.get('name', book['name'])
book['email']=request.json.get('email', book['email'])
return jsonify(book)
return jsonify({'error': '本が見つかりません'}), 404
DELETEメソッドはこちら。
# Deleteメソッド
@app.route('/books/<int:book_id>', methods=['DELETE'])
def delete_book(book_id):
if book_id in books:
del books[book_id]
return jsonify({'data': '本の削除が成功しました'})
return jsonify({'error': '本が見つかりません'}), 404
if __name__ == '__main__':
app.run(debug=True)
Pythonファイルが直接実行されたときにFlaskアプリを起動する。
デバッグをTrueにしているのでエラーメッセージが詳細に表示される。
もちろん自分でログを仕込んでもOK
仮想環境を無効化はこれ
deactivave
ソースコードはこちら
https://github.com/tomohiro-dev/python-crud-api
あとがき
ちなみに、フレームワークとライブラリのちがいについて。
- フレームワーク
- アプリケーションを作るための「骨組み」。
- 例えば、家を建てるときに、最初から家の枠組みができている状態がフレームワーク。その枠組みに部屋や家具を追加していくだけで、家が完成する。
- 例: Django, Flask
つまり、ゼロからすべてを作る必要はなく、すでに用意されている基本的な部分を使って、自分が追加したい機能だけを作ればいいので開発スピードが上がる。
- ライブラリ
- プログラミングを簡単にするための「道具」。
- 例えば、料理をするときに使う調味料や調理器具のセットがいわゆるライブラリ。これを使えば、同じ料理を一から作るよりも簡単に美味しい料理が作れる。
- 例: React.js, Next.js
つまり、ライブラリにある道具(関数やクラス)を使って、自分の作りたい機能をすばやく作り上げることができる。フレームワーク内でライブラリはあらかじめ準備されていることが多い。例えば、LaravelはjavaScriptのライブラリ、Vue.jsやReact.jsの環境構築ができる。(Next.jsもできるかも?知らんけど)