FastAPIで郵便番号辞書をAPI化
日本郵便から提供されているデータを加工したものを実際に利用できるようにするためにFastAPIを使ってAPI化してみました。とはいえ経験は皆無なのでwebでの情報をもとに見よう見まねです。
環境の準備
まずはFastAPIとそれを実行するためのuvicornをインストールします。
$ pip install uvicorn pydantic fastapi
API用のスクリプト
作成したFastAPI対応部分を載せておきます。当初はoriginsやapp.add-middleware()の部分は記述していなかったのですが、next.jsのコードからAPIアクセスでエラーが発生していました。全然理由がわからなかったのですが、microsoft edgeの開発者モードでの Copilot からのサジェスチョンに従って追加したところ見事に動作しました。
現状ではnext.jsもこのAPIも同じWSL2のubuntu上で動かしています。originsは実際の環境に合わせて変更が必要になると思います。
postapi.py
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
import postdb
app = FastAPI()
origins = [
"http://localhost",
"http://localhost:3000",
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/postdb/{pcode}")
async def read_pcode(pcode:str):
#print(pcode)
connection = postdb.init()
result = postdb.search(connection, pcode)
postdb.close(connection)
#print(result)
return result
postdb.init()、postdb.close()はDBとのコネクション、コネクション解除を行っています。postdb.search()は指定された郵便番号に紐づく住所情報を検索しています。
APIの起動
$ uvicorn postapi:app --reload --host 0.0.0.0