Python
のFlask
フレームワークは、シンプルかつ強力なWebアプリケーション開発を可能にする軽量フレームワークです。特に、RESTful API
の構築においてFlaskはそのシンプルさと柔軟性から多くの開発者に利用されています。本記事では、Flaskを使った基本的なCRUD操作(Create、Read、Update、Delete)をサポートするRESTful APIの実装方法を紹介します。
Flaskとは?
Flask
は、Python
で作成された軽量なWebフレームワークで、簡単にWebアプリケーションやAPIサーバーを構築できます。Flaskはマイクロフレームワーク
と呼ばれ、必要最低限の機能だけを提供するため、使いやすく、プロジェクトに合わせて自由に拡張できます。RESTful APIを構築する際に、Flaskの簡潔なルーティングと強力なエコシステムは非常に役立ちます。
RESTful APIとCRUD操作
RESTful APIは、HTTPプロトコルを利用してリソースを操作するためのAPI設計のスタイルです。主に以下の4つのHTTPメソッドを使用して、CRUD操作(データの作成、取得、更新、削除)を行います。
GET
:データの取得(Read)POST
:新しいデータの作成(Create)PUT
:既存データの更新(Update)DELETE
:データの削除(Delete) 次に、Flaskを使ってこれらの操作を実装する方法を見ていきましょう。
Flaskのインストール
まず、Flaskをインストールします。ターミナルで以下のコマンドを実行してインストールしてください。
pip install flask
インストールが完了したら、シンプルなAPIサーバーを構築していきます。
FlaskでのRESTful API構築
以下に、Flaskを使って基本的なCRUD操作を実装したRESTful APIのサンプルコードを紹介します。このAPIでは、シンプルなデータとして「本」の情報(タイトルと著者)を管理します。
APIの基本構成
まず、app.py
というファイルを作成し、Flaskアプリケーションの基本的なセットアップを行います。
from flask import Flask, jsonify, request
app = Flask(__name__)
# 仮のデータベースとしてリストを使用
books = [
{"id": 1, "title": "Flask Web Development", "author": "Miguel Grinberg"},
{"id": 2, "title": "`Python` Crash Course", "author": "Eric Matthes"}
]
# ルート(/)にアクセスしたときの動作
@app.route('/')
def index():
return "Welcome to the Book API!"
if __name__ == '__main__':
app.run(debug=True)
この基本的なコードで、Flaskアプリケーションが起動し、/
エンドポイントにアクセスすると「Welcome to the Book API!」というメッセージが表示されます。app.run(debug=True)
でデバッグモードを有効にしているため、開発中にエラーが発生すると詳細なメッセージが表示されます。
CRUD操作の実装
データの取得(Read) - GETメソッド
まず、APIで既存のデータ(ここでは本のリスト)を取得できるようにします。/books
というエンドポイントを作成し、GETメソッドで全ての本の情報を取得します。
@app.route('/books', methods=['GET'])
def get_books():
return jsonify(books) # データをJSON形式で返す
特定のIDの本だけを取得する場合は、/books/<id>
というエンドポイントを追加します。
@app.route('/books/<int:book_id>', methods=['GET'])
def get_book(book_id):
book = next((book for book in books if book["id"] == book_id), None)
if book:
return jsonify(book)
return jsonify({"error": "Book not found"}), 404
新しいデータの作成(Create) - POSTメソッド
次に、新しい本を追加するエンドポイントを作成します。POSTメソッドを使って、クライアントから送信されたデータを受け取り、リストに追加します。
@app.route('/books', methods=['POST'])
def create_book():
new_book = request.get_json() # クライアントからのデータを取得
new_book["id"] = len(books) + 1 # 新しいIDを割り当て
books.append(new_book)
return jsonify(new_book), 201 # 201は「作成された」を意味するステータスコード
データの更新(Update) - PUTメソッド
次に、既存の本のデータを更新するエンドポイントを作成します。PUTメソッドを使い、特定のIDの本を更新します。
@app.route('/books/<int:book_id>', methods=['PUT'])
def update_book(book_id):
book = next((book for book in books if book["id"] == book_id), None)
if book is None:
return jsonify({"error": "Book not found"}), 404
updated_data = request.get_json()
book.update(updated_data)
return jsonify(book)
データの削除(Delete) - DELETEメソッド
最後に、特定のIDの本を削除するエンドポイントを作成します。
@app.route('/books/<int:book_id>', methods=['DELETE'])
def delete_book(book_id):
global books
books = [book for book in books if book["id"] != book_id]
return jsonify({"message": "Book deleted"}), 200
Flask APIの起動とテスト
ここまで実装したコードを保存し、以下のコマンドでFlaskアプリケーションを起動します。
python app.py
Flaskサーバーがhttp://127.0.0.1:5000
で起動します。次に、Postman
やcurl
などのツールを使って、APIにリクエストを送り、各エンドポイントが正しく動作するか確認します。
APIのテスト例
全ての本を取得(GET /books
)
curl http://127.0.0.1:5000/books
特定の本を取得(GET /books/<id>
)
curl http://127.0.0.1:5000/books/1
新しい本を追加(POST /books
)
curl -X
POST -H "Content-Type: application/json" -d '{"title":"New Book","author":"John Doe"}' http://127.0.0.1:5000/books
本を更新(PUT /books/<id>
)
curl -X PUT -H "Content-Type: application/json" -d '{"title":"Updated Book","author":"Jane Doe"}' http://127.0.0.1:5000/books/1
本を削除(DELETE /books/<id>
)
curl -X DELETE http://127.0.0.1:5000/books/1
まとめ
Flaskを使ってRESTful APIを構築することで、シンプルなCRUD操作を効率的に実装できます。本記事では、データの作成(POST)、取得(GET)、更新(PUT)、削除(DELETE)といった基本的なCRUD操作をFlaskでどのように実装するかを解説しました。Flaskは小規模なプロジェクトやAPIのプロトタイプに最適で、今後さらに拡張して認証やデータベース連携などの機能も追加できます。