Fast API
Back-End Programming
サーバ形式モノクロアーキテクチャ:1台の大型サーバからなり、1台のサーバですべての機能(サービス、機械など)を処理する
バージョンを変更するたびに、サーバはブロック全体を構築する必要があるため、導入速度が遅い. マイクロサービスアーキテクチャ:機能サーバを作成し、通信するための複数の独立したサーバからなる構造 REST API
リソースを名前で区切って、リソースを交換する状態を表します.
1)HTTP URIによりリソースを指定し,2)HTTPメソッドによりそのリソースにCRUD操作を適用する.
Web上での通信は主に情報インタラクション時に守らなければならない通信プロトコルHTTP(Hyper Text Transfer Protocol)を採用し,基本的に80番ポートを用いてサーバやクライアントと通信する.
URIとは?
Uniform Resource Identifierで文字列を構成してインターネット上のリソースを識別
URIは、インターネット上のリソースの位置を示すURLを含み、URIはより広い範囲である.
CRUD操作とは?
CRUDとは、ほとんどのコンピュータソフトウェアが持つ基本的なデータ処理機能です.作成、読み取り、更新、削除です.
RESTにおけるCRUD操作はHTTPメソッドとして表現され,作成はPOST,読み出しはGET,更新はPUT,PATCH,削除はDELETEとなる.
GET vs POST
Status Code
クライアントのリクエストにサーバがどのように応答するかを示すデジタルコード.
例えば、404ノードFound、502 Bad Gate等のエラー
Synchronize vs Asynchronize Sync:サーバに要求を送信する場合、クライアント-サーバ通信など、次の操作を実行するためにリアルタイムで応答するTaskが必要です.
クライアントが情報を要求すると、サーバが応答を返す前に、クライアントは待機状態になります. Async:リクエスト送信時に応答状態にかかわらず次のような操作が可能なTaskは,メールシステムを考えると容易である.
2人のユーザー間でメールがやり取りされている場合は、他のユーザーの返信を待つことなく、他のタスクを実行できます. Fast API
Fast APIプロパティ
FastAPIの利点 Flaskよりも簡潔なRouter構文(FastAPIはFlaskから発展した) 非同期サポート Built-in API Documentation(Swagger) PydanticによるシリアルおよびValidation FastAPIの欠点今まで、Flashのユーザーはもっと多くて、 ORMなどのデータベースに関連するライブラリは少ない
◇FastAPI公式サイトではデータベース関連の使い方 FastAPIプリファレンスパラメータ
FastAPI構造(インフラストラクチャ)
main.py:アプリケーションを実行するEntryPointモジュール
*最高コード実行の開始点またはプログラム進入点 を示す. main.pyまたはapp.py:Flash APIのアプリケーションとルータの設定 model.py:MLmodelのクラスと関数定義 Pometryを使用した仮想envの管理
詳細については、PDFを参照してください.
FastAPIの基礎知識
Path Parameter vs Query Parameter
Web上でGetメソッドを用いてデータを転送する方法は2つに分けられる.
ex)ID 402のユーザ情報を取得したい場合は、 Path Parameter:/user/402、変数 としてサーバに402という値を渡す Query Parameter:/users?id=402は、入力データがAPIの後にQuery形式で渡される.
Query StringはKey、Valueペアからなり、「&」を使用して複数ペアのQueryを渡すことができます.
ex) https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=広津区 リソースを識別する必要がある場合、Path Parameterがより適切であり、ソートおよびフィルタリングが必要である場合、Query Parameterがより適切である. Path Paramter in FastAPI
FastAPIは、GetとPostを区別できるレコーダです.
GETメソッドパラメータである{user id}は関数の値に注入される.
Path Parameter方式とは異なり、get URLにParamterを渡す必要はありません.
でも、URLの後ろに「?「&」でリクエストを接続できます.
また、データがない場合、自動的にEmpty Listに戻りますので、追加のエラー処理が必要になる場合があります.
Optionとして宣言する場合は、TypingモジュールのOptionを使用して特定のパラメータを指定します.
クライアントがAPIにデータを送信する場合はRequest Bodyを使用し,この場合はPOSTメソッドを使用する.
GET方式は要求ヘッダ(URL)にデータを転送し、POST方式は要求Bodyにデータを転送する.を作成し、要求Bodyのデータ をシアンで定義する. POSTメソッドとして定義関数のパラメータ宣言タイプHitingの場合、要求BodyデータのタイプがタイプHitingと一致するか否かを検証する .
Response Body
POST方式では、
すなわち,APIがクライアントに送信した出力データを宣言されたクラスに変換し,データをValidationしてJson Formatに変換してクライアントに送信する.
以下のコードを実行すると、要求データはクライアントからAPIにname、description、price、taxの4種類の要求を要求し、APIからクライアントに送信された応答データはname、price、taxから応答として送信される.
Pydantic Library
FastAPIでクラスを宣言するライブラリで、要求/応答時にデータ型が正しいかどうかのValidationとSettingsを管理します.
実行時にタイプロックを強制してデータハンドルを安全に処理
Python基本タイプ(String、Intなど)とタイプライブラリのList、Dict、TupleのValidationをサポート Pydantic Validation
下位からPython Classを使用してValidationを行う場合は、initで変数を設定し、If文で例外処理を設定する必要があるため、コードが長くなります.
しかしPydantic Validationは Pydantic Config
サーバ形式
バージョンを変更するたびに、サーバはブロック全体を構築する必要があるため、導入速度が遅い.
リソースを名前で区切って、リソースを交換する状態を表します.
1)HTTP URIによりリソースを指定し,2)HTTPメソッドによりそのリソースにCRUD操作を適用する.
Web上での通信は主に情報インタラクション時に守らなければならない通信プロトコルHTTP(Hyper Text Transfer Protocol)を採用し,基本的に80番ポートを用いてサーバやクライアントと通信する.
URIとは?
Uniform Resource Identifierで文字列を構成してインターネット上のリソースを識別
URIは、インターネット上のリソースの位置を示すURLを含み、URIはより広い範囲である.
CRUD操作とは?
CRUDとは、ほとんどのコンピュータソフトウェアが持つ基本的なデータ処理機能です.作成、読み取り、更新、削除です.
RESTにおけるCRUD操作はHTTPメソッドとして表現され,作成はPOST,読み出しはGET,更新はPUT,PATCH,削除はDELETEとなる.
クライアントのリクエストにサーバがどのように応答するかを示すデジタルコード.
例えば、404ノードFound、502 Bad Gate等のエラー
Synchronize vs Asynchronize
クライアントが情報を要求すると、サーバが応答を返す前に、クライアントは待機状態になります.
2人のユーザー間でメールがやり取りされている場合は、他のユーザーの返信を待つことなく、他のタスクを実行できます.
Fast APIプロパティ
FastAPIの利点
◇FastAPI公式サイトではデータベース関連の使い方
FastAPI構造(インフラストラクチャ)
*最高コード実行の開始点またはプログラム進入点
詳細については、PDFを参照してください.
FastAPIの基礎知識
Path Parameter vs Query Parameter
Web上でGetメソッドを用いてデータを転送する方法は2つに分けられる.
ex)ID 402のユーザ情報を取得したい場合は、
Query StringはKey、Valueペアからなり、「&」を使用して複数ペアのQueryを渡すことができます.
ex) https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=広津区
FastAPIは、GetとPostを区別できるレコーダです.
GETメソッドパラメータである{user id}は関数の値に注入される.
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("users/{user_id}")
def get_user(user_id):
return {"user_id": user_id}
if __name__ == '__main__':
uvicorn.run(app, host='0.0.0.0', port=8000)
Query Parameter in FastAPIPath Parameter方式とは異なり、get URLにParamterを渡す必要はありません.
でも、URLの後ろに「?「&」でリクエストを接続できます.
また、データがない場合、自動的にEmpty Listに戻りますので、追加のエラー処理が必要になる場合があります.
from fastapi import FastAPI
import uvicorn
app = FastAPI()
fake_db = [{'item_name': 'Foo'}, {'item_name': 'Bar'}, {'item_name': 'Baz'}]
@app.get("/items/")
def read_item(skip: int=0, limit: int=10):
return fake_db[skip: skip + limit]
if __name__ == '__main__':
uvicorn.run(app, host='0.0.0.0', port=8000)
Optional ParameterOptionとして宣言する場合は、TypingモジュールのOptionを使用して特定のパラメータを指定します.
from typing import Optional
from fastapi import FastAPI
import uvicorn
@app.get('/items/{item_id}')
def read_item(item_id: str, q: Optional[str] = None):
if q:
return {'item_id': item_id, 'q': q}
return {'item_id': item_id}
if __name__ == '__main__':
uvicorn.run(app, host='0.0.0.0', port=8000)
Request BodyクライアントがAPIにデータを送信する場合はRequest Bodyを使用し,この場合はPOSTメソッドを使用する.
GET方式は要求ヘッダ(URL)にデータを転送し、POST方式は要求Bodyにデータを転送する.
from typing import Optional
from fastapi import FastAPI
import uvicorn
from pydantic import BaseModel
class Item(BaseModel):
name:str
description: Optional[str] = None
price: float
tax: Optional[float] = None
app = FastAPI()
@app.post("/items/")
def create_item(item: Item):
return item
if __name__ == '__main__':
uvicorn.run(app, host='0.0.0.0', port=8000)
クラスResponse Body
POST方式では、
response_model
をパラメータとしてデコーダに渡し、クラスごとに自動的に応答を実行する.すなわち,APIがクライアントに送信した出力データを宣言されたクラスに変換し,データをValidationしてJson Formatに変換してクライアントに送信する.
以下のコードを実行すると、要求データはクライアントからAPIにname、description、price、taxの4種類の要求を要求し、APIからクライアントに送信された応答データはname、price、taxから応答として送信される.
from typing import Optional
from fastapi import FastAPI
import uvicorn
from pydamic import BaseModel
class ItemIn(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: Optional[float] = None
class ItemOut(BaseModel):
name: str
price: float
tax: Optional[float] = None
app = FastAPI()
@app.post('/items/', response_model=ItemOut)
def create_item(item: ItemIn):
return item
if __name__ == '__main__':
uvicorn.run(app, host='0.0.0.0', port=8000)
PydanticPydantic Library
FastAPIでクラスを宣言するライブラリで、要求/応答時にデータ型が正しいかどうかのValidationとSettingsを管理します.
実行時にタイプロックを強制してデータハンドルを安全に処理
Python基本タイプ(String、Intなど)とタイプライブラリのList、Dict、TupleのValidationをサポート
下位からPython Classを使用してValidationを行う場合は、initで変数を設定し、If文で例外処理を設定する必要があるため、コードが長くなります.
@dataclass
Decoratorを使用して設定した場合はinitを使用する必要はありません.文を使用しない場合は、ビルトインメソッドを使用してValidationを実行できますが、Validation用のコードが必要です.しかしPydantic Validationは
BaseModel
を継承し、データを指定するだけでinitとValidationが自動的に行われます.Reference
この問題について(Fast API), 我々は、より多くの情報をここで見つけました https://velog.io/@junsoo96/Fast-APIテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol