WindowsでFastAPI

Pythonのインストールと設定はコチラを参照

FastAPIのプロジェクトを作成

Poetryでプロジェクトを作成

> mkdir test-fastapi

> cd test-fastapi

> poetry init
とりあえずデフォルトで作成

> poetry install
Creating virtualenv test-fastapi in C:\Users\tmacoto\Work\test-fastapi\.venv
Updating dependencies
Resolving dependencies... (0.1s)

Writing lock file

Installing the current project: test-fastapi (0.1.0)
Warning: The current project could not be installed: [Errno 2] No such file or directory: 'C:\\Users\\tmacoto\\Work\\test-fastapi\\README.md'
If you do not want to install the current project use --no-root.
If you want to use Poetry only for dependency management but not for packaging, you can disable package mode by setting package-mode = false in your pyproject.toml file.
In a future version of Poetry this warning will become an error!

FastAPI用のパッケージをインストールする

> poetry add fastapi
Using version ^0.112.1 for fastapi

Updating dependencies
Resolving dependencies... (0.9s)

Package operations: 9 installs, 0 updates, 0 removals

  - Installing idna (3.7)
  - Installing sniffio (1.3.1)
  - Installing typing-extensions (4.12.2)
  - Installing annotated-types (0.7.0)
  - Installing anyio (4.4.0)
  - Installing pydantic-core (2.20.1)
  - Installing pydantic (2.8.2)
  - Installing starlette (0.38.2)
  - Installing fastapi (0.112.1)

Writing lock file

> poetry add uvicorn
Using version ^0.30.6 for uvicorn

Updating dependencies
Resolving dependencies... (0.3s)

Package operations: 4 installs, 0 updates, 0 removals

  - Installing colorama (0.4.6)
  - Installing click (8.1.7)
  - Installing h11 (0.14.0)
  - Installing uvicorn (0.30.6)

Writing lock file

FastAPIの動作確認

main.py を作成すし、下記のコードを入力する

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

uvicorn でサーバを起動する

> poetry shell
Spawning shell within C:\Users\tmacoto\Work\test-fastapi\.venv
PowerShell 7.4.4
> uvicorn main:app --reload
INFO:     Will watch for changes in these directories: ['C:\\Users\\tmacoto\\Work\\test-fastapi']
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [22184] using StatReload
INFO:     Started server process [11188]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

ブラウザで http://127.0.0.1:8000 にアクセスしてみる。

{"Hello":"World"}

ブラウザで http://127.0.0.1:8000/items/1234?q=abcd にアクセスしてみる。

{"item_id":1234,"q":"abcd"}

ブラウザで http://127.0.0.1/docs にアクセスしてみる。

動作しました。

Apacheで表示する

VirtualHostの設定はコチラも参照

> cd scoop\persist\apache\conf
> vi httpd.conf

下記のLoadModuleの行のコメントアウトを外す
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

> cd extra
> vi httpd-vhosts.conf

下記を追記する
# test-fastapi
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName test-fastapi.local
    ProxyRequests Off
    ProxyPass / http://127.0.0.1:8000/
    ProxyPassReverse / http://127.0.0.1:8000/
    ErrorLog "logs/test-fastapi.local-error.log"
    CustomLog "logs/test-fastapi.local-access.log" common
</VirtualHost>

hostsファイルを管理者権限で編集する

> sudo vi C:\Windows\System32\drivers\etc\hosts

下記を追加
127.0.0.1       test-laravel.local

Apacheを再起動する

ブラウザで http://test-fastapi.local にアクセスする

{"Hello":"World"}

動作しました。

コメント