Python による REST API の簡単な使用

Guanhui
リリース: 2020-06-15 18:15:24
転載
5111 人が閲覧しました

Python による REST API の簡単な使用

Fastapi は、ドキュメント用の Pydantic と OpenAPI (旧 Swagger)、迅速な開発と展開用の Docker、Starlette フレームワークに基づく簡単なテストの使用を促進する Python ベースのフレームワークです。

これにより、不必要な肥大化を招くことなく、OpenAPI の自動検証やドキュメント化など、多くの利点が得られます。組み込み機能をまったく提供しないことと、組み込み機能を提供しすぎることの間のバランスが良いと思います。

はじめに

fastapi と ASGI サーバー (uvicorn など) をインストールします。

Python 3.6.7 を使用していることを確認してください

pippython で Python 2 バージョンが提供される場合は、pip3

python3

を使用する必要がある場合があります。また、Python の入門に関する私の記事もご覧ください。

pip install fastapi uvicorn
ログイン後にコピー

を実行し、古い「hello world」を main.py

ファイルに追加します。

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def home():
    return {"Hello": "World"}
ログイン後にコピー

開発を実行します

開発のために実行するには、uvicorn main:app --reload を実行します。単純なサーバーが行うことはこれだけです。これで、//localhost:8000/ をチェックして「ホームページ」を表示できるようになります。そして、ご覧のとおり、JSON 応答は「正常に機能」します。 Swagger UI は //localhost:8000/docs から無料で入手することもできます。

検証

前述したように、データを検証する (そして、受け入れられたデータ形式に関する Swagger ドキュメントを生成する) ことは簡単です。 fastapi から Query

import を追加し、それを使用して検証を強制するだけです。

from fastapi import FastAPI, Query

@app.get('/user')
async def user(
    *,
    user_id: int = Query(..., title="The ID of the user to get", gt=0)
):
  return { 'user_id': user_id }
ログイン後にコピー
最初のパラメータ ... は、ユーザーがパラメータを指定しない場合のデフォルト値です。 value このデフォルト値が提供されます。 None に設定した場合、デフォルト値はなく、パラメーターはオプションです。デフォルト値がなくパラメータが必須であるようにするには、代わりに省略記号または ... を使用します。

このコードを実行すると、Swagger UI に更新が自動的に表示されます:

Swagger UI では、新しい /user ルートを表示できます。特定のユーザー ID を使用してリクエストを実行します。

任意のユーザー ID を入力すると、リクエストが自動的に実行されることがわかります (例: //localhost:8000/user?user_id=1)。 。ページには、エコーされたユーザー ID のみが表示されます。

代わりにパス パラメーターを使用する場合 (

/user/1

になるように、Query# の代わりに Path

を入力して使用します) # #. 両方の

Post ルート を組み合わせることも可能です POST

ルートがある場合は、入力

@app.post('/user/update')
async def update_user(
    *,
    user_id: int,
    really_update: int = Query(...)
):
    pass
ログイン後にコピー
を定義するだけです。この場合、user_idQueryPath を含まない整数としてのみ定義されていることがわかります; つまり、POST リクエスト本文に含まれることになります。 JSON データなどのより複雑なデータ構造を受け入れる場合は、リクエスト モデルを検討する必要があります。リクエスト モデルとレスポンス モデル

Pydantic モデルを使用して記録および宣言できます。詳細なリクエストおよびレスポンス モデルこれにより、すべてのモデルの OpenAPI ドキュメントを自動的に作成できるだけでなく、リクエスト モデルとレスポンス モデルを検証して、入力された POST データが正しいこと、および返されたデータがモデルに準拠していることを確認します。 次のようにモデルを宣言するだけです:

from pydantic import BaseModel

class User(BaseModel):
    id:: int
    name: str
    email: str
ログイン後にコピー
次に、ユーザー モデルを入力として取得したい場合は、これを行うことができます:

async def update_user(*, user: User):
    pass
ログイン後にコピー
または、次のように使用したい場合出力:

@app.get('/user')
async def user(
    *,
    user_id: int = Query(..., title="The ID of the user to get", gt=0),
    response_model=User
):
  my_user = get_user(user_id)
  return my_user
ログイン後にコピー
より大きな API のルーティングと分解

API をルートに分解するには、APIRouter

を使用できます。これは私の API ###app/routers/v1/__init__.py######
from fastapi import APIRouter
from .user import router as user_router

router = APIRouter()

router.include_router(
    user_router,
    prefix='/user',
    tags=['users'],
)
ログイン後にコピー
###であり、これは ###app/routers/v1/user.py## で見つけることができます # ユーザーを使用上記のコード - ###APIRouter### をインポートし、###@ app.get(' /user')## の代わりに ###@ router.get('/')< aaaa>### を使用します。 #. ルートはプレフィックス相対であるため、自動的に ###/user /### にルーティングされます。###
from fastapi import APIRouter

router = APIRouter()

@router.get('/')
async def user(
    *,
    user_id: int = Query(..., title="The ID of the user to get", gt=0),
    response_model=User
):
  my_user = get_user(user_id)
  return my_user
ログイン後にコピー
###最後に、アプリケーション #v1###router ですべての ## を使用し、## を編集するだけです。 #main.py### から: ###
from fastapi import FastAPI
from app.routers import v1

app = FastAPI()

app.include_router(
    v1.router,
    prefix="/api/v1"
)
ログイン後にコピー
### この方法でルーターを自由にチェーンできるため、大規模なアプリケーションを分割し、バージョンごとに API を設定できます。 ########Fasapi の作者の 1 人は、Dockerizing を驚くほど簡単にします!デフォルトの ###Dockerfile### は 2 OK!###
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7

COPY ./app /app
ログイン後にコピー

是否想通过自动重新加载进行 Dockerize 开发?这是我在撰写文件中使用的秘方:

version: "3"
services:
  test-api:
    build: ..
    entrypoint: '/start-reload.sh'
    ports:
        - 8080:80
    volumes:
        - ./:/app
ログイン後にコピー

这会将当前目录挂载为app并将在任何更改时自动重新加载。您可能还想将app / app用于更大的应用程序。

有用的网址

所有这些信息都来自 Fastapi网站,该文档具有出色的文档,我鼓励您阅读。此外,作者在 Gitter 上非常活跃并乐于助人!

结论

就是这样-我希望本指南对您有所帮助,并且您会像我一样喜欢使用 Fastapi。

推荐教程:Python教程

以上がPython による REST API の簡単な使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート