{}const=>[]async()letfn</>var
開発Python

FlaskでシンプルなAPIを作成する:開発者向けステップバイステップガイド

Flaskを使用してPythonで本格的なRESTful APIを作成する方法を学びます。コード例を含む詳細なガイド:CRUD操作、データベース操作、検証、エラー処理、デプロイ。

К

Kodik

著者

2分で読める

Flaskは、WebアプリケーションとAPIの構築に最適なPythonのマイクロフレームワークです。そのシンプルさと柔軟性により、初心者にも経験豊富な開発者にも最適な選択肢となります。この記事では、Flaskを使用してシンプルで完全な機能を備えたAPIを作成する方法について説明します。

API とは何か、なぜ必要なのか

API(アプリケーションプログラミングインターフェイス)は、さまざまなプログラムが相互にやり取りできるようにするためのルールとツールのセットです。RESTful APIは、HTTPリクエストを使用してデータに対してCRUD(作成、読み取り、更新、削除)操作を実行します。現代のWebアプリケーションは、多くの場合、フロントエンドとバックエンドに分割され、APIはそれらの間の橋渡し役を果たします。

🔥 10万人以上の学生が参加中

理論を読むのに疲れた?
コーディングの時間だ!

Kodik — 実践でプログラミングを学ぶアプリ。AIメンター、インタラクティブなレッスン、実際のプロジェクト。

🤖 AI 24時間
🎓 修了証
💰 無料
🚀 始める
今日参加

環境の準備

始める前に、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'}), 500

APIテスト

テストには、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-sqlalchemy

SQLAlchemyを使用したブックモデルの例:

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-cors
CODE_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チャンネル、ここでは、役立つ資料、プログラミングのヒント、そして学習のあらゆる段階で支援してくれる積極的な開発者コミュニティのサポートを見つけることができます!

🎯先延ばしをやめよう

記事は気に入った?
実践の時間だ!

Kodikでは読むだけでなく、すぐにコードを書く。理論 + 実践 = 本当のスキル。

即座に実践
🧠AIがコードを説明
🏆修了証

登録不要 • カード不要