Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com> Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com> Co-authored-by: Maruo.S <raspi-maru2004@outlook.jp>
15 KiB
最初のステップ
最もシンプルなFastAPIファイルは以下のようになります:
{* ../../docs_src/first_steps/tutorial001_py39.py *}
これをmain.pyにコピーします。
ライブサーバーを実行します:
$ <font color="#4E9A06">fastapi</font> dev <u style="text-decoration-style:solid">main.py</u>
<span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span> Starting development server 🚀
Searching for package file structure from directories
with <font color="#3465A4">__init__.py</font> files
Importing from <font color="#75507B">/home/user/code/</font><font color="#AD7FA8">awesomeapp</font>
<span style="background-color:#007166"><font color="#D3D7CF"> module </font></span> 🐍 main.py
<span style="background-color:#007166"><font color="#D3D7CF"> code </font></span> Importing the FastAPI app object from the module with
the following code:
<u style="text-decoration-style:solid">from </u><u style="text-decoration-style:solid"><b>main</b></u><u style="text-decoration-style:solid"> import </u><u style="text-decoration-style:solid"><b>app</b></u>
<span style="background-color:#007166"><font color="#D3D7CF"> app </font></span> Using import string: <font color="#3465A4">main:app</font>
<span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Server started at <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font>
<span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Documentation at <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000/docs</u></font>
<span style="background-color:#007166"><font color="#D3D7CF"> tip </font></span> Running in development mode, for production use:
<b>fastapi run</b>
Logs:
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Will watch for changes in these directories:
<b>[</b><font color="#4E9A06">'/home/user/code/awesomeapp'</font><b>]</b>
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Uvicorn running on <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font> <b>(</b>Press CTRL+C
to quit<b>)</b>
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started reloader process <b>[</b><font color="#34E2E2"><b>383138</b></font><b>]</b> using WatchFiles
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started server process <b>[</b><font color="#34E2E2"><b>383153</b></font><b>]</b>
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Waiting for application startup.
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Application startup complete.
出力には次のような行があります:
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
この行はローカルマシンでアプリが提供されているURLを示しています。
チェック
ブラウザでhttp://127.0.0.1:8000を開きます。
次のようなJSONレスポンスが表示されます:
{"message": "Hello World"}
対話的APIドキュメント
次に、http://127.0.0.1:8000/docsにアクセスします。
自動生成された対話的APIドキュメントが表示されます (Swagger UIで提供):
代替APIドキュメント
次に、http://127.0.0.1:8000/redocにアクセスします。
先ほどとは異なる、自動生成された対話的APIドキュメントが表示されます (ReDocによって提供):
OpenAPI
FastAPIは、APIを定義するためのOpenAPI標準規格を使用して、すべてのAPIの「スキーマ」を生成します。
「スキーマ」
「スキーマ」は定義または説明です。実装コードではなく、単なる抽象的な説明です。
API「スキーマ」
ここでは、OpenAPIはAPIのスキーマ定義の方法を規定する仕様です。
このスキーマ定義はAPIパス、受け取り可能なパラメータなどが含まれます。
データ「スキーマ」
「スキーマ」という用語は、JSONコンテンツなどの一部のデータの形状を指す場合もあります。
そのような場合、スキーマはJSON属性とそれらが持つデータ型などを意味します。
OpenAPIおよびJSONスキーマ
OpenAPIはAPIのためのAPIスキーマを定義します。そして、そのスキーマはJSONデータスキーマの標準規格に準拠したJSONスキーマを利用するAPIによって送受されるデータの定義(または「スキーマ」)を含んでいます。
openapi.jsonを確認
素のOpenAPIスキーマがどのようなものか興味がある場合、FastAPIはすべてのAPIの説明を含むJSON(スキーマ)を自動的に生成します。
次の場所で直接確認できます: http://127.0.0.1:8000/openapi.json.
次のようなJSONが表示されます。
{
"openapi": "3.1.0",
"info": {
"title": "FastAPI",
"version": "0.1.0"
},
"paths": {
"/items/": {
"get": {
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
...
OpenAPIの目的
OpenAPIスキーマは、FastAPIに含まれている2つのインタラクティブなドキュメントシステムの動力源です。
そして、OpenAPIに基づいた代替案が数十通りあります。 FastAPIで構築されたアプリケーションに、これらの選択肢を簡単に追加できます。
また、APIと通信するクライアント用のコードを自動的に生成するために使用することもできます。たとえば、フロントエンド、モバイル、またはIoTアプリケーションです。
アプリをデプロイ(任意)
任意でFastAPIアプリをFastAPI Cloudにデプロイできます。まだなら、待機リストに登録してください。 🚀
すでにFastAPI Cloudアカウントがある場合(待機リストから招待済みの場合😉)、1コマンドでアプリケーションをデプロイできます。
デプロイする前に、ログインしていることを確認してください:
$ fastapi login
You are logged in to FastAPI Cloud 🚀
その後、アプリをデプロイします:
$ fastapi deploy
Deploying to FastAPI Cloud...
✅ Deployment successful!
🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev
以上です!これで、そのURLでアプリにアクセスできます。 ✨
ステップ毎の要約
Step 1: FastAPIをインポート
{* ../../docs_src/first_steps/tutorial001_py39.py hl[1] *}
FastAPIは、APIのすべての機能を提供するPythonクラスです。
/// note | 技術詳細
FastAPIはStarletteを直接継承するクラスです。
FastAPIでもStarletteのすべての機能を利用可能です。
///
Step 2: FastAPIの「インスタンス」を生成
{* ../../docs_src/first_steps/tutorial001_py39.py hl[3] *}
ここで、app変数がFastAPIクラスの「インスタンス」になります。
これが、すべてのAPIを作成するための主要なポイントになります。
Step 3: path operationを作成
パス
ここでの「パス」とは、最初の/から始まるURLの最後の部分を指します。
したがって、次のようなURLでは:
https://example.com/items/foo
...パスは次のようになります:
/items/foo
/// info | 情報
「パス」は一般に「エンドポイント」または「ルート」とも呼ばれます。
///
APIを構築する際、「パス」は「関心事」と「リソース」を分離するための主要な方法です。
Operation
ここでの「オペレーション」とは、HTTPの「メソッド」の1つを指します。
以下のようなものの1つ:
POSTGETPUTDELETE
...さらによりエキゾチックなもの:
OPTIONSHEADPATCHTRACE
HTTPプロトコルでは、これらの「メソッド」の1つ(または複数)を使用して各パスにアクセスできます。
APIを構築するときは、通常、これらの特定のHTTPメソッドを使用して特定のアクションを実行します。
通常は次を使用します:
POST: データの作成GET: データの読み取りPUT: データの更新DELETE: データの削除
したがって、OpenAPIでは、各HTTPメソッドは「オペレーション」と呼ばれます。
「オペレーションズ」とも呼ぶことにします。
path operation デコレータを定義
{* ../../docs_src/first_steps/tutorial001_py39.py hl[6] *}
@app.get("/")は直下の関数が下記のリクエストの処理を担当することをFastAPIに伝えます:
- パス
/ getオペレーション
/// info | @decorator Info
Pythonにおける@somethingシンタックスはデコレータと呼ばれます。
「デコレータ」は関数の上に置きます。かわいらしい装飾的な帽子のようです(この用語の由来はそこにあると思います)。
「デコレータ」は直下の関数を受け取り、それを使って何かを行います。
私たちの場合、このデコレーターは直下の関数がオペレーション getを使用したパス /に対応することをFastAPI に通知します。
これが「path operation デコレータ」です。
///
他のオペレーションも使用できます:
@app.post()@app.put()@app.delete()
また、よりエキゾチックなものも使用できます:
@app.options()@app.head()@app.patch()@app.trace()
/// tip | 豆知識
各オペレーション (HTTPメソッド)は自由に使用できます。
FastAPIは特定の意味づけを強制しません。
ここでの情報は、要件ではなくガイドラインとして提示されます。
例えば、GraphQLを使用する場合、通常はPOSTオペレーションのみを使用してすべてのアクションを実行します。
///
Step 4: path operation 関数を定義
以下は「path operation 関数」です:
- パス: は
/です。 - オペレーション: は
getです。 - 関数: 「デコレータ」の直下にある関数 (
@app.get("/")の直下) です。
{* ../../docs_src/first_steps/tutorial001_py39.py hl[7] *}
これは、Pythonの関数です。
この関数は、GETオペレーションを使ったURL「/」へのリクエストを受け取るたびにFastAPIによって呼び出されます。
この場合、この関数はasync関数です。
async defの代わりに通常の関数として定義することもできます:
{* ../../docs_src/first_steps/tutorial003_py39.py hl[7] *}
/// note | 備考
違いが分からない場合は、Async: "急いでいますか?"{.internal-link target=_blank}を確認してください。
///
Step 5: コンテンツの返信
{* ../../docs_src/first_steps/tutorial001_py39.py hl[8] *}
dict、list、str、intなどの単一の値を返すことができます。
Pydanticモデルを返すこともできます(後で詳しく説明します)。
JSONに自動的に変換されるオブジェクトやモデルは他にもたくさんあります(ORMなど)。 お気に入りのものを使ってみてください。すでにサポートされている可能性が高いです。
Step 6: デプロイする
**FastAPI Cloud**に1コマンドでアプリをデプロイします: fastapi deploy. 🎉
FastAPI Cloudについて
**FastAPI Cloud**は、FastAPIの作者とそのチームによって開発されています。
最小限の労力でAPIの構築、デプロイ、アクセスを行うプロセスを合理化します。
FastAPIでアプリを構築するのと同じ開発体験を、クラウドへのデプロイにもたらします。 🎉
FastAPI Cloudは、FastAPI and friendsのオープンソースプロジェクトに対する主要スポンサーであり、資金提供元です。 ✨
他のクラウドプロバイダにデプロイする
FastAPIはオープンソースで、標準に基づいています。選択した任意のクラウドプロバイダにFastAPIアプリをデプロイできます。
クラウドプロバイダのガイドに従って、FastAPIアプリをデプロイしてください。 🤓
まとめ
FastAPIをインポートします。appインスタンスを生成します。@app.get("/")のようなデコレータを使用して、path operation デコレータを記述します。- path operation 関数を定義します。例:
def root(): ...。 fastapi devコマンドで開発サーバーを起動します。- 任意で
fastapi deployを使ってアプリをデプロイします。

