この記事では、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を作成してみてください。
コメント