Python で API をすばやく構築する方法

Mary-Kate Olsen
リリース: 2024-11-06 14:15:02
オリジナル
114 人が閲覧しました

API は、データ交換や外部統合に依存するほとんどのアプリケーションのバックボーンです。

Python で API を構築する方法を学ぶと、アプリを他のシステムに接続し、汎用性の高いバックエンドを作成する多くの機会が開かれます。

ここでは、API の基本、REST API の作成、および 2 つの人気のある Python フレームワークである Flask と FastAPI を使用した REST API の構築について説明します。


1. API の概要

今日のデジタル世界では、API がどこにでも存在します。

これにより、さまざまなシステムやアプリケーションが相互に通信し、データや機能をシームレスに共有できるようになります。

たとえば、アプリを使用して天気を確認するとき、アプリは実際には天気データを返す API を呼び出します。

API は、標準化された方法でリクエストを処理し、データを返す仲介者として機能することで、作業を容易にします。

API はクライアント アプリケーション (Web サイトやモバイル アプリなど) にのみサービスを提供するわけではないことにも注目してください。

同じインフラストラクチャ内のバックエンド システムまたはマイクロサービス間で API を使用すると、データをより効率的に管理できます。


2. REST API

REST (Representational State Transfer) は、そのシンプルさと HTTP との互換性により、API を作成する最も一般的な方法の 1 つです。

RESTful API は、標準 HTTP メソッド (GET、POST、PUT、DELETE など) でリソースを操作できるように構造化されています。

これらは CRUD (作成、読み取り、更新、削除) 操作を管理するためによく使用され、各リクエスト メソッドがリソース データに対して操作を実行します。

Web サービスを構築している場合、最初は REST が最も親しみやすく、広くサポートされている形式である可能性があります。

REST API はステートレスでもあります。つまり、各リクエストは独立して動作し、REST API をより簡単に拡張できます。


3. Flask を使用した API の構築

Flask は軽量で立ち上げと実行が簡単なため、小規模または中規模のプロジェクトに最適です。

Flask を使用すると、API のほぼすべての側面を制御できますが、データ検証とエラー処理についてはもう少し作業が必要になります。

ただし、この柔軟性は、API の各部分の機能をより詳細に制御したい人にとっては理想的です。

Flask APIの作成例

Flask でタスク管理 API がどのように見えるかを次に示します。

まず、pip を使用して flask をインストールしてください:

pip install flask
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この例は、タスクの取得と作成、更新と削除のためのエンドポイントを迅速に設定する方法を示しています。

from flask import Flask, jsonify, request

app = Flask(__name__)

tasks = [
    {"id": 1, "task": "Learn Flask", "done": False},
    {"id": 2, "task": "Build API", "done": False}
]

@app.route('/tasks', methods=['GET'])
def get_tasks():
    return jsonify({"tasks": tasks})

@app.route('/tasks', methods=['POST'])
def create_task():
    new_task = {
        "id": len(tasks) + 1,
        "task": request.json["task"],
        "done": False
    }
    tasks.append(new_task)
    return jsonify(new_task), 201

@app.route('/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
    task = next((task for task in tasks if task["id"] == task_id), None)
    if task:
        return jsonify(task)
    return jsonify({"message": "Task not found"}), 404

@app.route('/tasks/<int:task_id>', methods=['PUT'])
def update_task(task_id):
    task = next((task for task in tasks if task["id"] == task_id), None)
    if task:
        task.update(request.json)
        return jsonify(task)
    return jsonify({"message": "Task not found"}), 404

@app.route('/tasks/<int:task_id>', methods=['DELETE'])
def delete_task(task_id):
    task = next((task for task in tasks if task["id"] == task_id), None)
    if task:
        tasks.remove(task)
        return jsonify({"message": "Task deleted"})
    return jsonify({"message": "Task not found"}), 404

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

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この Python コードは、Flask を使用してタスクのリストを管理する REST API を設定し、クライアントがタスクを作成、取得、更新、削除できるようにします。

タスクは、各タスクが ID、タスク、および完了ステータスを含む辞書であるリストに保存されます。

/tasks エンドポイントは、タスクの完全なリストを返す GET リクエストと、新しいタスクを追加する POST リクエストをサポートし、各タスクに一意の ID を自動的に割り当てます。

追加のエンドポイント /tasks/ により、ユーザーは個々のタスクを操作できるようになります。GET は ID で特定のタスクを取得し、PUT はそれを更新し、DELETE はリストからタスクを削除します。

指定された ID を持つタスクが見つからない場合、これらのエンドポイントは適切なメッセージを含む 404 エラーを返します。

API はデバッグ モードで実行されるため、開発やテストの目的に最適です。

大規模なプロジェクトの場合は、より構造化されたルーティングおよび検証メカニズムを追加する必要がある場合があることに注意してください。


4. FastAPI を使用した API の構築

FastAPI は、構造と型の安全性をもう少し必要とするパフォーマンス重視のアプリケーションまたはプロジェクトに最適です。

FastAPI は、デフォルトで (非同期機能のおかげで) 高速になるように設計されており、Pydantic を使用してすぐに使用できる堅牢なデータ検証を提供します。

特に非同期機能が必要で、サードパーティのパッケージを使用せずに組み込みの検証が必要なプロジェクトの場合、FastAPI は非常に直観的で使いやすいことがわかりました。

さらに、自動ドキュメント化 (Swagger UI 経由) により、非常に便利になります。

FastAPI APIの作成例

FastAPI でのタスク管理 API は次のようになります。

最初に pip を使用して fastapi と uvicorn をインストールすることを忘れないでください:

pip install flask
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

その後、API を作成できます:

from flask import Flask, jsonify, request

app = Flask(__name__)

tasks = [
    {"id": 1, "task": "Learn Flask", "done": False},
    {"id": 2, "task": "Build API", "done": False}
]

@app.route('/tasks', methods=['GET'])
def get_tasks():
    return jsonify({"tasks": tasks})

@app.route('/tasks', methods=['POST'])
def create_task():
    new_task = {
        "id": len(tasks) + 1,
        "task": request.json["task"],
        "done": False
    }
    tasks.append(new_task)
    return jsonify(new_task), 201

@app.route('/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
    task = next((task for task in tasks if task["id"] == task_id), None)
    if task:
        return jsonify(task)
    return jsonify({"message": "Task not found"}), 404

@app.route('/tasks/<int:task_id>', methods=['PUT'])
def update_task(task_id):
    task = next((task for task in tasks if task["id"] == task_id), None)
    if task:
        task.update(request.json)
        return jsonify(task)
    return jsonify({"message": "Task not found"}), 404

@app.route('/tasks/<int:task_id>', methods=['DELETE'])
def delete_task(task_id):
    task = next((task for task in tasks if task["id"] == task_id), None)
    if task:
        tasks.remove(task)
        return jsonify({"message": "Task deleted"})
    return jsonify({"message": "Task not found"}), 404

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

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この Python コードは、FastAPI を使用してタスク管理 API を作成し、データ検証と型の強制に Pydantic モデルを活用します。

ID、タスク、完了ステータスを含むタスク モデルを定義し、タスクのリストを初期化します。

API には、タスクに対して CRUD 操作を実行するエンドポイントが含まれています。/tasks エンドポイントを使用すると、GET リクエストでタスク リストを取得し、POST リクエストで新しいタスクを追加し、受信データを自動的に検証できます。

/tasks/{task_id} エンドポイントを使用すると、GET による特定のタスクの取得、PUT による更新、DELETE による削除が可能になり、指定された ID を持つタスクが見つからない場合は 404 エラーが返されます。

FastAPI の非同期機能と統合されたドキュメントにより、この API は効率的かつテストしやすくなり、迅速な開発に最適です。


5. API のテスト

テストは、特に他のアプリケーションが使用する API を作成する場合に重要です。

Flask と FastAPI は単体テストの優れたサポートを提供し、各エンドポイントの動作を簡単に検証できます。

テストを容易にするために、一般的なテスト構造には pytest を使用することをお勧めします。pytest は Flask と FastAPI の両方と互換性があるためです。

特に FastAPI の場合、TestClient は HTTP リクエストを模擬し、レスポンスをチェックするのに役立つツールです。

pip を使用して httpx をインストールする必要があります:

pip install flask
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

FastAPI エンドポイントをテストする例を次に示します:

from flask import Flask, jsonify, request

app = Flask(__name__)

tasks = [
    {"id": 1, "task": "Learn Flask", "done": False},
    {"id": 2, "task": "Build API", "done": False}
]

@app.route('/tasks', methods=['GET'])
def get_tasks():
    return jsonify({"tasks": tasks})

@app.route('/tasks', methods=['POST'])
def create_task():
    new_task = {
        "id": len(tasks) + 1,
        "task": request.json["task"],
        "done": False
    }
    tasks.append(new_task)
    return jsonify(new_task), 201

@app.route('/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
    task = next((task for task in tasks if task["id"] == task_id), None)
    if task:
        return jsonify(task)
    return jsonify({"message": "Task not found"}), 404

@app.route('/tasks/<int:task_id>', methods=['PUT'])
def update_task(task_id):
    task = next((task for task in tasks if task["id"] == task_id), None)
    if task:
        task.update(request.json)
        return jsonify(task)
    return jsonify({"message": "Task not found"}), 404

@app.route('/tasks/<int:task_id>', methods=['DELETE'])
def delete_task(task_id):
    task = next((task for task in tasks if task["id"] == task_id), None)
    if task:
        tasks.remove(task)
        return jsonify({"message": "Task deleted"})
    return jsonify({"message": "Task not found"}), 404

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

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

どちらのフレームワークでも、テストは簡単で、API が期待どおりに動作することを、特に進化に応じて検証できます。


6. Flask と FastAPI の比較

Flask と FastAPI の比較を見てみましょう

How to Quickly Build APIs in Python

簡単なプロトタイプや小規模なプロジェクトに取り組んでいる場合は、Flask のシンプルさだけで十分かもしれません。

高い同時実行性、データ検証、または自動文書化を必要とするプロジェクトに、FastAPI はより強力で機能豊富な環境を提供します。


7. 結論

Flask と FastAPI はどちらも、さまざまな種類のプロジェクトに適した強みを持っています。

Python Web 開発が初めての場合は、より高度なものに進む前に、Flask から始めると基本を理解するのに役立ちます。

一方、FastAPI は、組み込みの検証とドキュメントを備えた最新の高パフォーマンス API 開発を探している場合に理想的な選択肢です。

どれを選択しても、Python は API 開発のための堅牢なエコシステムを提供します。

どちらのフレームワークでも、単純な Web サイトから複雑なマイクロサービスまで、さまざまなアプリケーションを強化できる API を作成できます。

重要なのは、実験して各フレームワークの長所を理解し、ニーズに合った適切なツールを選択することです。

以上がPython で API をすばやく構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!