2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python FlaskでRESTful APIを作成してみる

Posted at

Python FlaskでRESTful APIを作成してみた

Flaskを使用して簡単なRESTful APIを作成する方法について説明します。

0. Flaskとは

Flaskとは、Pythonのための軽量なウェブアプリケーションフレームワークです。
Pythonで用いられるフレームワークとしてはDjangoも人気ですが、
簡単なLINEボットやスマートスピーカーのアプリなど、小規模〜中規模のWebアプリケーションであれば、Flaskで作成するのができるのでオススメです。

1. 作業の手順

1.1. Flaskのインストール

まず、Flaskをインストールします。以下のコマンドをターミナルで実行してください。

pip install flask

1.2. ディレクトリ構造の準備

プロジェクトのディレクトリ構造を以下のように準備します。

my_flask_app/
│
├── app.py
└── requirements.txt

1.3. Flaskアプリケーションの作成

app.pyファイルを以下の内容で作成します。

from flask import Flask, jsonify, request

app = Flask(__name__)

# サンプルデータ
books = [
    {'id': 1, 'title': '1984', 'author': 'George Orwell'},
    {'id': 2, 'title': 'To Kill a Mockingbird', 'author': 'Harper Lee'}
]

# 全ての本を取得
@app.route('/api/books', methods=['GET'])
def get_books():
    return jsonify({'books': books})

# 特定の本を取得
@app.route('/api/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 is None:
        return jsonify({'error': 'Book not found'}), 404
    return jsonify(book)

# 新しい本を追加
@app.route('/api/books', methods=['POST'])
def add_book():
    new_book = request.get_json()
    new_book['id'] = books[-1]['id'] + 1 if books else 1
    books.append(new_book)
    return jsonify(new_book), 201

# 本を更新
@app.route('/api/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)

# 本を削除
@app.route('/api/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 '', 204

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

2. サンプルコードの説明

2.1. インポートとアプリケーションの初期化

from flask import Flask, jsonify, request

app = Flask(__name__)

Flaskモジュールをインポートし、アプリケーションを初期化します。

2.2. サンプルデータ

books = [
    {'id': 1, 'title': '1984', 'author': 'George Orwell'},
    {'id': 2, 'title': 'To Kill a Mockingbird', 'author': 'Harper Lee'}
]

サンプルデータとして、2冊の本の情報を用意します。

2.3. エンドポイントの定義

すべての本を取得


@app.route('/api/books', methods=['GET'])
def get_books():
    return jsonify({'books': books})

GETリクエストに対してすべての本の情報を返します。

特定の本を取得

@app.route('/api/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 is None:
        return jsonify({'error': 'Book not found'}), 404
    return jsonify(book)

指定されたIDの本を取得します。

新しい本を追加

@app.route('/api/books', methods=['POST'])
def add_book():
    new_book = request.get_json()
    new_book['id'] = books[-1]['id'] + 1 if books else 1
    books.append(new_book)
    return jsonify(new_book), 201

POSTリクエストで新しい本を追加します。

本を更新

@app.route('/api/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)

指定されたIDの本の情報を更新します。

本を削除

コードをコピーする
@app.route('/api/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 '', 204

指定されたIDの本を削除します。

3. 動かし方

3.1. ディレクトリに移動

ターミナルでプロジェクトのディレクトリに移動します。

cd /path/to/my_flask_app

対象のapp.pyがあるところまで移動すれば良いです。環境によって変わることがあるので。

3.2. アプリケーションの実行

以下のコマンドでFlaskアプリケーションを実行します。

python app.py

3.3. APIのテスト

ブラウザまたはcURLを使用してAPIをテストします。

すべての本を取得

curl http://127.0.0.1:5000/api/books

特定の本を取得

curl http://127.0.0.1:5000/api/books/1

新しい本を追加

curl -X POST -H "Content-Type: application/json" -d '{"title": "New Book", "author": "New Author"}' http://127.0.0.1:5000/api/books

本を更新

curl -X PUT -H "Content-Type: application/json" -d '{"title": "Updated Book"}' http://127.0.0.1:5000/api/books/1

本を削除

curl -X DELETE http://127.0.0.1:5000/api/books/1

以上が、Flaskを使用して簡単なRESTful APIを作成する手順です。
必要に応じて機能を拡張していってください。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?