FastApi学習-01
3231 ワード
前に書く
FastApiはpythonの非同期Webフレームワークで、Go,NodeJsに匹敵する性能を持ち、要するに、速い.もちろん、他のWebフレームワークと比較する利点もあります.例えば、Swaggerドキュメントをサポートし、Python 3を追加します.6+のデータ型指示機能、Pydanticベースのデータ型チェックなど.個人的には学ぶ必要があると思います.ここに自分の学習記録を書いてください.
インストール
ここでuvicornはASGI(非同期ゲートウェイプロトコルインタフェース)サーバであり、ネットワークプロトコルとPythonアプリケーションの間の標準インタフェースであり、FlaskフレームワークはWSDI(Webサーバゲートウェイプロトコルインタフェース)を使用している.
HelloWorld
新しいmainを作成します.py、最も簡単なアプリケーションを作成
アプリケーションの起動方法は2つあります.1つはコマンドラインで起動します.
もう一つはmainです.py内部実装アプリケーションの起動
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はFastApiの一例であり、上記で定義されている.
getはhttpプロトコルの方法であり,GETの他にPOST,PUT,DELETEなどの方法がある.一般的に、GETはデータの取得に使用され、POSTはデータの作成に使用され、PUTはデータの更新に使用され、DELETEはデータの削除に使用される.もちろん、自分の習慣によって、違う方法を使うこともできます.
「/」は、サーバがアクセスするときに対応するインタフェース関数にマッピングできるルーティングを定義します.
hello_worldは、特定の操作を実現するために定義されたインタフェース関数です.FastApiは非同期フレームワークなので、インタフェース関数は以下のように定義することもできます.
公式ドキュメントではdefかasync defかを簡単に説明しています
1.使用するサードパーティ製ライブラリが呼び出し時にawait somefunc()の方法でasync defを使用することを教えてくれた場合
2.使用するサードパーティ製ライブラリがデータベース、APIなどと対話している場合、await呼び出し方式がサポートされていない場合はdefを使用する
3.async defを使用して、他の応答と対話しない場合、他の応答を待つ
4.何も知らないならdefを使う
いずれの場合も、FastApiは非同期で効率を向上させますが、状況に応じて適切な方法を選択するとパフォーマンスの最適化に役立ちます.
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は非同期で効率を向上させますが、状況に応じて適切な方法を選択するとパフォーマンスの最適化に役立ちます.