Flaskを使用したAPI開発の詳細解説と応用例

この記事では、PythonのWebフレームワークであるFlaskを使用したAPI開発について詳しく解説します。基本的なAPIの作成から応用例まで、コードとその詳細な解説を交えてご紹介します。

目次

Flaskとは

FlaskはPythonで書かれた軽量なWebフレームワークです。シンプルながら拡張性が高く、小規模なWebアプリケーションから大規模なシステムまで幅広く対応しています。

API開発の基本

API(Application Programming Interface)は、プログラム間でデータや機能を共有するためのインターフェースです。今回は、Flaskを使って簡単なRESTful APIを作成します。

環境構築

まずはFlaskをインストールします。

# Flaskのインストール
pip install Flask

基本的なAPIの作成

以下は、基本的なAPIを作成するためのサンプルコードです。

# main.py
from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/api/hello', methods=['GET'])
def hello():
    return jsonify({'message': 'Hello, World!'}), 200

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

このコードは、`/api/hello`というエンドポイントで「Hello, World!」というメッセージをJSON形式で返す非常にシンプルなAPIです。

応用例

ここからは、FlaskでAPIを作成する際の応用例を2つご紹介します。

例1:データベースの連携

この例では、SQLiteデータベースと連携して、データのCRUD操作(Create、Read、Update、Delete)を行います。

# main.py
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))

# データベースの初期化
db.create_all()

@app.route('/api/users', methods=['POST'])
def add_user():
    name = request.json['name']
    new_user = User(name=name)
    db.session.add(new_user)
    db.session.commit()
    return jsonify({'id': new_user.id}), 201

このAPIは、POSTリクエストで新しいユーザーをデータベースに追加します。JSONで`name`を受け取り、SQLiteデータベースに保存しています。

例2:認証機能の追加

次に、JWT(JSON Web Token)を使用してAPIに認証機能を追加する例を見てみましょう。

# main.py
from flask import Flask, request, jsonify
from flask_jwt_extended import JWTManager, jwt_required, create_access_token

app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'secret'
jwt = JWTManager(app)

@app.route('/api/login', methods=['POST'])
def login():
    username = request.json['username']
    password = request.json['password']

    if username == 'admin' and password == 'password':
        access_token = create_access_token(identity=username)
        return jsonify({'access_token': access_token}), 200

    return jsonify({'message': 'Invalid credentials'}), 401

@app.route('/api/protected', methods=['GET'])
@jwt_required()
def protected():
    return jsonify({'message': 'This is a protected route'}), 200

このAPIは、`/api/login`でユーザー名とパスワードを受け取り、正当な認証情報であればJWTを発行します。また、`@jwt_required()`デコレータを使用して認証が必要なエンドポイントも作成しています。

まとめ

Flaskを使用したAPI開発は、基本的な機能から高度な機能まで幅広く対応可能です。この記事で紹介した内容を基に、ぜひ自分自身でAPIを作成してみてください。

コメント

コメントする

目次