Flaskは、WebアプリケーションとAPIの構築に最適なPythonのマイクロフレームワークです。そのシンプルさと柔軟性により、初心者にも経験豊富な開発者にも最適な選択肢となります。この記事では、Flaskを使用してシンプルで完全な機能を備えたAPIを作成する方法について説明します。
API とは何か、なぜ必要なのか
API(アプリケーションプログラミングインターフェイス)は、さまざまなプログラムが相互にやり取りできるようにするためのルールとツールのセットです。RESTful APIは、HTTPリクエストを使用してデータに対してCRUD(作成、読み取り、更新、削除)操作を実行します。現代のWebアプリケーションは、多くの場合、フロントエンドとバックエンドに分割され、APIはそれらの間の橋渡し役を果たします。
環境の準備
始める前に、Flaskをインストールする必要があります。プロジェクトの依存関係を分離するために仮想環境を使用することをお勧めします。
python -m venv venv
source venv/bin/activate # Linux/Mac用
venv\Scripts\activate # Windows用
pip install flask基本的なAPIの作成
最も単純なFlaskアプリケーションの作成から始めましょう。ファイル app.py を作成します。
from flask import Flask, jsonify, request
app = Flask(__name__)
# 一時的なデータストレージ
books = [
{'id': 1, 'title': 'Clean code', 'author': 'Robert Martin'},
{'id': 2, 'title': 'Python. To the heights of mastery', 'author': 'Luciano Ramallo'}
]
@app.route('/')
def home():
return jsonify({'message': 'Welcome to the API library!'})
if __name__ == '__main__':
app.run(debug=True)コマンド python app.py を使用してアプリケーションを起動すると、サーバーは http://127.0.0.1:5000/ で利用可能になります。
CRUD 操作の実装
次に、本を操作するためのエンドポイントを追加します。
すべてのブックを取得する(GET)
@app.route('/api/books', methods=['GET'])
def get_books():
return jsonify({'books': books, 'count': len(books)})IDによる書籍の取得(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:
return jsonify(book)
return jsonify({'error': 'Book not found'}), 404新しいブックの作成(POST)
@app.route('/api/books', methods=['POST'])
def create_book():
if not request.json or 'title' not in request.json:
return jsonify({'error': 'You must specify the name of the book'}), 400
new_book = {
'id': books[-1]['id'] + 1 if books else 1,
'title': request.json['title'],
'author': request.json.get('author', 'Unknown author')
}
books.append(new_book)
return jsonify(new_book), 201ブックの更新(PUT)
@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 not book:
return jsonify({'error': 'Book not found'}), 404
book['title'] = request.json.get('title', book['title'])
book['author'] = request.json.get('author', book['author'])
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 jsonify({'message': 'Book deleted successfully'})エラー処理
より有益な回答のためにエラーハンドラを追加します。
@app.errorhandler(404)
def not_found(error):
return jsonify({'error': 'Resource not found'}), 404
@app.errorhandler(500)
def internal_error(error):
return jsonify({'error': 'Internal server error'}), 500APIテスト
テストには、curl、Postman、または Python ライブラリ requests を使用できます。
# すべての本を受け取る
curl http://127.0.0.1:5000/api/books
# 新しいブックを作成する
curl -X POST http://127.0.0.1:5000/api/books \
-H "Content-Type: application/json" \
-d '{"title":"Perfect Code","author":"Steve McConnell"}' ブックを更新する
curl -X PUT http://127.0.0.1:5000/api/books/1 \
-H "Content-Type: application/json" \
-d '{"title":"Clean Code (new edition)"}'# 本を削除する
curl -X DELETE http://127.0.0.1:5000/api/books/2検証の追加
より信頼性の高いデータ検証のために、flask-marshmallowライブラリを使用できます。
from flask_marshmallow import Marshmallow
ma = Marshmallow(app)
class BookSchema(ma.Schema):
class Meta:
fields = ('id', 'title', 'author')
book_schema = BookSchema()
books_schema = BookSchema(many=True)データベースの接続
実際のアプリケーションでは、データベースを使用することをお勧めします。Flask-SQLAlchemyをインストールします。
pip install flask-sqlalchemySQLAlchemyを使用したブックモデルの例:
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///books.db'
db = SQLAlchemy(app)
class Book(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(200), nullable=False)
author = db.Column(db.String(100))
def to_dict(self):
return {
'id': self.id,
'title': self.title,
'author': self.author
}CORSの追加
APIがフロントエンドアプリケーションによって使用される場合は、CORSを設定する必要があります。
pip install flask-corsCODE_BLOCK_13__
安全とベストプラクティス
APIを開発する際には、セキュリティを念頭に置くことが重要です。環境変数を使用して機密データを保存し、JWTトークンを介して認証を実装し、要求数を制限し(レート制限)、すべての受信データを検証し、本番環境でHTTPSを使用します。
また、コードをモジュールに分割してプロジェクトの構造を整理することをお勧めします。モデル、ルート、構成のファイルを個別に作成します。Blueprintを使用して関連するエンドポイントをグループ化し、コードのメンテナンス性とスケーラビリティを向上させます。
APIの展開
本番環境で Flask アプリケーションをデプロイするには、Gunicorn などの WSGI サーバーを使用します。
pip install gunicorn
gunicorn -w 4 app:app一般的なデプロイプラットフォーム: Heroku、DigitalOcean、AWS、またはリバースプロキシとしてnginxを使用した従来のVPS。
結論
当社は、すべての主要なCRUD操作、エラー処理、データ検証を含む、Flaskを使用した本格的なRESTful APIを作成しました。Flaskは、どのような複雑さのAPIを作成するための最小限ながらも強力な基盤を提供します。次のステップは、認証の追加、Swaggerを使用したAPIのドキュメント化、ユニットテストの作成、パフォーマンスの最適化です。
PythonとWeb開発をより深く理解したいですか?
アプリケーション コディック Python、JavaScript、API、その他多くのテクノロジーに関する構造化されたコースを提供しています。トレーニングは、ステップバイステップの説明を伴う実践的な例に基づいています。
私たちの Telegramチャンネル、ここでは、役立つ資料、プログラミングのヒント、そして学習のあらゆる段階で支援してくれる積極的な開発者コミュニティのサポートを見つけることができます!
