FastApi学習-01

3231 ワード

前に書く
FastApiはpythonの非同期Webフレームワークで、Go,NodeJsに匹敵する性能を持ち、要するに、速い.もちろん、他のWebフレームワークと比較する利点もあります.例えば、Swaggerドキュメントをサポートし、Python 3を追加します.6+のデータ型指示機能、Pydanticベースのデータ型チェックなど.個人的には学ぶ必要があると思います.ここに自分の学習記録を書いてください.
インストール
pip install fastapi
pip install uvicorn

ここでuvicornはASGI(非同期ゲートウェイプロトコルインタフェース)サーバであり、ネットワークプロトコルとPythonアプリケーションの間の標準インタフェースであり、FlaskフレームワークはWSDI(Webサーバゲートウェイプロトコルインタフェース)を使用している.
HelloWorld
新しいmainを作成します.py、最も簡単なアプリケーションを作成
from fastapi import FastAPI

app = FastAPI()  #       ,uvicorn          


@app.get("/")  #      "/"      ,          
def hello_world():
    return "Hello World"

アプリケーションの起動方法は2つあります.1つはコマンドラインで起動します.
uvicorn main:app

もう一つはmainです.py内部実装アプリケーションの起動
import uvicorn

if __name__ == "__main__":
    uvicorn.run("main:app")
    '''    uvicorn.run(app)   fastapi   ,            reload workers  '''

uvicorn起動パラメータ(アプリケーション内起動)
パラメータ
説明
パラメータタイプ
デフォルト
host
バインドされたIPアドレス
String
127.0.0.1
port
バインドされたポート
Integer
8000
reload
自動的に再起動するかどうか、開発段階が適用されます
Bool
False
reload_dir
再起動ディレクトリのカスタマイズ
Text
None
workers
作業プロセス数reloadを設定すると、このパラメータは有効になりません.
Integer
1
log_level
ログ・レベル
Text
info
access_log
アクセスログを出力するかどうか
Bool
True
debug
debugモードは、オンにすると自動的にサービスを再起動します
Bool
False
proxy_headers
X-Forward-*の許可
Bool
True
forwarded_allow_ips
カンマで区切られたIPリストは,これらのIPからのエージェントヘッダが新人によって
Text
127.0.0.1
root_path
(オプション)適用先のパスの指定
Text
None
limit_concurency
同時制限
Integer
None制限なし
limit_max_requests
プロセスに到達するまでの最大接続数
Integer
None制限なし
backlog
せきそうさいだいせつぞくすう
Integer
2048
timeout_keep_live
どのくらいの時間を超えて自動的にKeep-Alive接続を閉じます
Integer
5
headers
カスタムレスポンスヘッダ
List
形は[(a,b)]
 
APIドキュメントの取得
アクセスバインディング127.0.0.1:8000/doc SwaggerUIスタイルのAPIドキュメントを取得
アクセスバインディング127.0.0.1:8000/redoc ReDocヘプタゴのAPIドキュメントを取得
インタフェースメソッドの概要
@app.get("/")  #      "/"      ,          
def hello_world():
    return "Hello World"

ここでappはFastApiの一例であり、上記で定義されている.
getはhttpプロトコルの方法であり,GETの他にPOST,PUT,DELETEなどの方法がある.一般的に、GETはデータの取得に使用され、POSTはデータの作成に使用され、PUTはデータの更新に使用され、DELETEはデータの削除に使用される.もちろん、自分の習慣によって、違う方法を使うこともできます.
「/」は、サーバがアクセスするときに対応するインタフェース関数にマッピングできるルーティングを定義します.
hello_worldは、特定の操作を実現するために定義されたインタフェース関数です.FastApiは非同期フレームワークなので、インタフェース関数は以下のように定義することもできます.
@app.get("/")  #      "/"      ,          
async def hello_world():
    return "Hello World"

公式ドキュメントではdefかasync defかを簡単に説明しています
1.使用するサードパーティ製ライブラリが呼び出し時にawait somefunc()の方法でasync defを使用することを教えてくれた場合
2.使用するサードパーティ製ライブラリがデータベース、APIなどと対話している場合、await呼び出し方式がサポートされていない場合はdefを使用する
3.async defを使用して、他の応答と対話しない場合、他の応答を待つ
4.何も知らないならdefを使う
いずれの場合も、FastApiは非同期で効率を向上させますが、状況に応じて適切な方法を選択するとパフォーマンスの最適化に役立ちます.