こんにちは!ビジネスアクセラレーション事業部の大瀧優杏です🎀
みなさん、一周回ってAPIってなんだっけ?ってなったことありませんか?
もしかして、私だけでしょうか ><笑
諸事情あってAIを使わないでバックエンドとフロントエンドをそれぞれ自力で作成して繋ぎ込みまで行うっていう挑戦をしているのですが、
「APIって何?」ってなったのでまとめます💦
背景
Pythonで一通りの処理が完成して、ターミナルで python3 app.py を実行し、予想通りの結果を得ることができました!
よし!これをフロントと繋げよう!
と思ったら、あれ??pythonで作った処理ってどうやってAPIにするんだ..?ってなりました😱
自分でもびっくりしました ><
だっていつも業務でAPI作っているので😖
思えば、今までAWSの便利さに甘えて
AWS Lambdaに処理を書いて、API Gatewayと繋げるようにCloudFormationのテンプレートを設定して、SAMでデプロイして…という流れに乗りすぎていて、
API GatewayなしでどうやってAPI作るの?
そもそもAPIって何なの?
と、ローカル環境を前にしてフリーズしてしまいました ><
APIとは
Application Programming Interfaceの略
Web API
HTTP/HTTPSベースでWebを介して使用するAPI
RESTful API
REpresentational State Transferの略
- アドレス可能性:すべての情報が一意なURIで表現できる
- ステートレス性:すべてのリクエストが完全に分離。リクエスト間で影響を及ぼさない
- 接続性:別の情報へのリンクを含めることができる
- 統一インターフェース:操作はHTTPメソッドを使用
リソース指向アーキテクチャ(ROA)の考え方に基づいた、上記の4原則を踏まえているものが「RESTful API」と呼ばれます。
HTTPメソッド
GET データ取得
POST データ新規作成
PUT データ更新
DELETE データ削除
APIの実装
FastAPIのインストール
pip install fastapi
FastAPIって?
FastAPI は、Python の標準である型ヒントに基づいて Python で API を構築するための、モダンで、高速(高パフォーマンス)な Web フレームワークです。
引用:
API
└─ Web API
└─ REST API
▲
│(作るための道具)
[ FastAPI ]
PythonでAPIを開発できるフレームワークとして他にFlaskやDjangoもありますが、
FastAPIは最初から非同期処理を前提に設計されていて、型チェックもしてくれるから、シンプルで高速なAPIが作りやすい
みたいです ><
Uvicornのインストール
pip install uvicorn
Uvicornって?
そのアプリを実行するための非同期APサーバで、ASGIサーバの一つ。
ASGIサーバとは、
非同期処理にも対応したアプリケーションサーバー
のことを指します。
アプリケーションサーバーとWEBサーバー
Webサーバー
主に静的コンテンツ。HTTPリクエストを受けてそのまま返す。
🔁 処理の仕組み
- ブラウザがURLにアクセス
- HTTPリクエスト送信
- HTMLや画像などの静的コンテンツを返す
- ブラウザに表示
アプリケーションサーバー
主に動的なコンテンツ。Webサーバーから転送されたリクエストの実行や、DBへのやり取りを行うランタイムを持つ。
🔁 処理の仕組み
- Webサーバーからリクエストを受け取る
- ビジネスロジックを実行
- DBや外部サービスと連携
- 動的な結果(HTMLやJSON)を生成
- Webサーバーに返す → ブラウザへ
参照:
図にすると、
サーバー(広い概念)
└─ アプリケーションサーバー
└─ ASGIサーバー(非同期対応の規格)
└─ Uvicorn(具体的な実装)
こんな感じ!!
Webサーバーから転送されたリクエストの実行を行うのがアプリケーションサーバーってことは、今回uvicornの他にwebサーバが必要なんじゃない?って思いましたが、
Uvicornは「APサーバー」でありながら、HTTPリクエストを受け付ける最低限のWebサーバー機能も内蔵している
みたいです ><
とても助かります ><
あとは仮想環境を作成し、上記パッケージをインストール、アプリを起動するだけです。
最後に
AWS環境(API Gateway + AWS Lambda)を使わずに、ゼロからローカルでAPIを作る方法について考える良い機会になりました!
ついでにサーバーのことまで理解できて嬉しいです😆
実際にAPI作成できたらまた記事にします!!
本当に今更???って感じだと思いますが、最後まで読んでいただき本当にありがとうございました🙏🏻