PythonFlaskフレームワークは、シンプルかつ強力な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で起動します。次に、Postmancurlなどのツールを使って、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のプロトタイプに最適で、今後さらに拡張して認証やデータベース連携などの機能も追加できます。