Skip to content

Blog

Python の FastAPI Web アプリで pydantic を使わずに POST メソッドを処理する

Python で FastAPI を使ったアプリケーションを Web アプリケーションを作成する際、POST メソッドで渡されるリクエストの処理は公式サイトの Request Body 説明ページ によると pydantic を使ったクラスで処理するサンプルが掲載されています。 しかし、例えば「POST されてくる JSON のフォーマットが一定では無い」といったケースだと pydantic ではやや困る場合があるかも知れません。 そういった場合は pydantic を使わず、Body を使ってリクエストを受け取り、json として処理する方法があります。 下記は FastAPI を mangum で AWS へデプロイすることを前提にしたサンプルです。

Python で「ハイフンを含んだデータ名」の JSON を pydantic で受け取る場合の処理

Python で「JSON でデータを受け取る」ようなケースを考えた場合、データを pydantic でクラス化するケースがあると思います。 例えば FastAPI で POST された JSON を受け取る Web アプリケーションを開発する場合などです。 こういった場合、「JSON 内のデータ名」と「クラスの変数名」は同じ名前にするのが自然だと思います。 しかし、- を含む JSON を渡された場合、どういって処理するのか、メモしておきたいと思います。

AWS API Gateway + Lambda + mangum + FastAPI な Python アプリケーションに POST された JSON を処理する

以前に mangum + FastAPI で ASGI な Python アプリケーションを AWS Lambda + API Gateway 上で動かすというメモを書きました。 mangummangum-cli を使うと FastAPI を使った Web アプリケーションを AWS の LambdaAPI Gateway を使って簡単に公開することが出来ます。

mangum-cli が無い場合は作成したアプリケーションを手動でアプリケーションをアップロードする必要があります。 CloudFormation を使うにしてもテンプレートを作成する必要があり、面倒です。 mangum-cli があればこれらの作業を自動化出来、手間なく、迅速にアプリケーションを配置することが出来ます。

FastAPI で REST API のエンドポイントを作成する場合、POST リクエストを受け付ける必要があります。 こういった場合の「POST された JSON を FastAPI な Python アプリケーションで処理する方法」をメモしておきます。

pyenv 自身をバージョンアップする

pyenv 自身をアップデートしたい場合、以下のように pyenv のインストールディレクトリで git pull するだけで可能です。

1
2
cd ${PYENV_ROOT}
git pull

プラグインを利用したい場合は pyenv-update${PYENV_ROOT}/plugins/ 配下にコピーします。

1
git clone git://github.com/yyuu/pyenv-update.git ${PYENV_ROOT}/plugins/pyenv-update

後は pyenv update すれば pyenv のアップデートが実行されます。

1
pyenv update

CentOS8 に axel をインストールして大きなファイルを分割ダウンロードする

以前に axel で CLI 上から分割ダウンロードするというメモを書きました。 CentOS8 では標準リポジトリや EPEL では axel が提供されていません。 getpagespeed というリポジトリでは axel が提供されているのですが、getpagespeed リポジトリを使うには登録が必要のようです (未確認)。 その為、今回はソースコードから axel をインストールしました。

指定された URL の英単語数を数える

「海外メーカー製品は、ドキュメントを英語で読むのが大変」という会話を耳にしたので、実際に「海外メーカー = シスコのドキュメントの英単語数」を計測してみました。 「英語の勉強をしてみよう」と思い立つのですが、単語を覚えるにしても「とりあえず人気のありそうな単語帳を買って…」となっても、興味が無く・使わない単語は忘れてしまいます。 逆に言うと「テクニカルドキュメントによく出てくる単語」を重点的に勉強すれば効率が良いのでは… と思い立った、ということもあります。 当初は「指定 URL の単語数を数える」だけのサンプルスクリプトを作ったのですが、結局 word-counter として PyPi に登録しました。 とは言え、PyPi として登録するほど大したことはしていません……