SlideShare a Scribd company logo
Python Charity Talks in japan
1
爆速で理解出来る
FastAPI
本発表の主旨
2
時間(スケジュール)がない!
とお困りな方へ
• FastなFWをご紹介!
• FANSHIP組込事例
自己紹介
会社:株式会社アイリッジ
名前:田川寛(タガワヒロシ)
3
モバイル バックエンド インフラ
Android java aws
ios php docker
python ansible
hadoop
neo4j
目次
FastAPIとは?
FastAPI 性能比較
FastAPI 構築&チュートリアル
FastAPI 組込事例紹介
FastAPI まとめ 4
5
とは?
6
FastAPIとは?
Python型に基づく
高速なWebフレームワーク
※公式:https://fastapi.tiangolo.com/
7
FastAPIのここが良い!!
FastAPIとは?
NodeJS・Goと同等の非常に高いパフォーマンス。
・高速
openAPIベースで実装。JSONスキーマ利用
・ 標準ベース
開発速度を約200~300%向上
エラー約40%削減。
・簡単
10
性能比較(速いの?)
12
FANSHIP組込事例紹介
13
FANSHIP組込事例紹介
■Django 800rps
14
FANSHIP組込事例紹介
■fastAPI 800rps
16
構築&チュートリアル
17
FastAPI構築
モジュールのインストール
※Python 3.6以上であること
※FastAPIはstarlette と言うフレームワークが動いており、FastAPIイ
ンストール後は、Responder が動作しなくなることがあります。もし
動かなくなったら、もう一度使いたいフレームワークをインストールし
なおしてみてください。
pip install fastapi
pip install sqlalchemy uvicorn
mkdir {projectName}
touch controllers.py
touch urls.py
touch run.py
18
FastAPIチュートリアル
controllers.py
このファイルでは、FastAPIインスタンスを生成し、この後紹介するurls.pyでURLに
紐づく関数を定義しています。
from fastapi import FastAPI
from starlette.requests import Request
app = FastAPI(
title=‘Pycon2020 iRidge',
description='FastAPIチュートリアル:FastAPIの紹介とFANSHIP組
込事例',
version='0.9 beta'
)
def index(request: Request):
return {'Hello': 'World’}
19
FastAPIチュートリアル
urls.py
これで、http://127.0.0.1:8000/にアクセスした時に、
controllers.py の def index() に処理が投げられるというわけです。
ちなみに、 app.add_api_route() は、FastAPIクラスのメンバ関数
ですが、裏で動いているstarletteのルーティング関数
app.add_route() でも良いです。
from controllers import *
# FastAPIのルーティング用関数
app.add_api_route('/', index)
20
FastAPIチュートリアル
run.py
from urls import app
import uvicorn
if __name__ == '__main__':
# コンソールで [$ uvicorn run:app --reload]でも可
uvicorn.run(app=app)
21
FastAPIチュートリアル
サーバー立ち上げ
http://127.0.0.1:8000/docs にアクセスすると・・・
hiroshi.tagawa@IRDG-20-027:~/project/pycon2020/fAPI$ python run.py
INFO: Started server process [88232]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: 127.0.0.1:62765 - "GET / HTTP/1.1" 200 OK
INFO: 127.0.0.1:62765 - "GET /favicon.ico HTTP/1.1" 404 Not Found
22
FastAPIチュートリアル
API完成
23
FastAPIチュートリアル
Swaggerが標準で搭載。
24
FANSHIP組込事例紹介
25
FANSHIP組込事例紹介
なぜFastAPIを選んだのか?
asyncが当時のFWでは未
対応
Djangoが機能豊富すぎて
逆に使いづらい。
顧客要望・社内要求の高
い機能が有り、早くに開
発着手する必要もあった。
27
FANSHIP組込事例紹介
■メッセージAPIフロー
機能概要
アプリ内メッセージを新規登録す
る(テスト配信含む)
28
FANSHIP組込事例紹介
def create_app() -> FastAPI:
app = FastAPI(title="InAppMessage ManagementAPI", version="1.0")
configure_logger()
configure_event_handler(app)
configure_middleware(app)
configure_routers(app)
return app
app = create_app()
@app.get("/heartbeat", include_in_schema=False)
def heartbeat():
return {"status": "OK"}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
29
FANSHIP組込事例紹介
def configure_event_handler(app: FastAPI) -> None:
async def db_startup() -> None:
await database.client.init(
host=settings.DB_HOST,
user=settings.DB_USER,
password=settings.DB_PASSWORD,
db=settings.DB_NAME,
)
fastapi_logger.info("DB server client successfully connected.")
async def db_shutdown() -> None:
await database.client.close()
fastapi_logger.info("DB server client successfully closed.")
app.add_event_handler("startup", db_startup)
app.add_event_handler("shutdown", db_shutdown)
30
まとめ
31
FastAPI まとめ
手軽に・簡単に・早く(速く)に
始められます。
アイリッジではPythonエンジニアを随時求めています。

More Related Content

PDF
Start python with fastapi
PDF
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
PDF
ニュースアプリで起きた不具合から学んだ 最適への一歩
PDF
Presto in Yahoo! JAPAN #yjdsnight
PDF
研究会20140604:進捗とWWDCとコードの書き方を少々
PDF
Rubyの会社でPythonistaが3ヶ月生き延びた話
PPTX
Tech lounge gcp_20190313
PDF
第104回 php勉強会@東京 Laravel
Start python with fastapi
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
ニュースアプリで起きた不具合から学んだ 最適への一歩
Presto in Yahoo! JAPAN #yjdsnight
研究会20140604:進捗とWWDCとコードの書き方を少々
Rubyの会社でPythonistaが3ヶ月生き延びた話
Tech lounge gcp_20190313
第104回 php勉強会@東京 Laravel

What's hot (20)

PDF
gRPC入門
PDF
東京Node学園 今できる通信高速化にトライしてみた
PDF
Web屋の運用その極意
PDF
タブブラウザSDKを作った話 #yjcamp
PDF
あなたの安心を高速に守る Container-based CI
PPTX
Swagger jjug ccc 2018 spring
PDF
Pylons ユーザのための Pyramid 移行ガイド
PPTX
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
PDF
Responsableを使ったadr実装
PDF
Prestoクエリログの保存/分析機能の構築 #yjdsnight
PDF
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PDF
Prepare for Java 9 #jjug
PDF
決済金融から始めるデータドリブンカンパニー #yjmu
PDF
YJTC18 A-1 大規模サーバの戦略
PDF
価値を届ける技術 #bpstudy 96
PDF
PHP5.6からPHP7.0への移行
PPTX
Spring I/O 2015 報告
PDF
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
PDF
GitHub APIとfreshで遊ぼう
PDF
bottleで始めるWEBアプリの最初の一歩
gRPC入門
東京Node学園 今できる通信高速化にトライしてみた
Web屋の運用その極意
タブブラウザSDKを作った話 #yjcamp
あなたの安心を高速に守る Container-based CI
Swagger jjug ccc 2018 spring
Pylons ユーザのための Pyramid 移行ガイド
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
Responsableを使ったadr実装
Prestoクエリログの保存/分析機能の構築 #yjdsnight
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
Prepare for Java 9 #jjug
決済金融から始めるデータドリブンカンパニー #yjmu
YJTC18 A-1 大規模サーバの戦略
価値を届ける技術 #bpstudy 96
PHP5.6からPHP7.0への移行
Spring I/O 2015 報告
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
GitHub APIとfreshで遊ぼう
bottleで始めるWEBアプリの最初の一歩
Ad

Similar to Python charity talk in japan fastAPI introduction (20)

PDF
Cloud Foundryで学ぶ、PaaSのしくみ講座
PDF
Fx OS n2_aoitan_firefox osことはじめ
PDF
Pyconjp2016 pyftplib
PDF
OpenStack環境構築支援について
PDF
Laravel_オープンソースカンファレンスhokkaido_JP_2014
PDF
フレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃう
PDF
N29 aoitan firefox osことはじめ
PDF
8時間耐久 PHP構築の教室
PPTX
Tokyo Webmining #12 Hapyrus
PDF
パッケージングの今と未来
PPTX
Pythonスタートアップ勉強会201109 python入門
PPTX
PHP x AWS でスケーラブルなシステムをつくろう
PDF
PHPとJavaScriptの噺
PPTX
smartFXにおけるApache Cordovaの活用について
PDF
Pykonjp2014
PDF
第2回名古屋SoftLayer勉強会 PBOX on SoftLayer
PDF
いまどき(これから)のPHP開発
PPT
Cake Matsuri Nanapi
PDF
Python & PyConJP 2014 Report
PDF
Foss4G 2015 Drupal Hands-on Session
Cloud Foundryで学ぶ、PaaSのしくみ講座
Fx OS n2_aoitan_firefox osことはじめ
Pyconjp2016 pyftplib
OpenStack環境構築支援について
Laravel_オープンソースカンファレンスhokkaido_JP_2014
フレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃう
N29 aoitan firefox osことはじめ
8時間耐久 PHP構築の教室
Tokyo Webmining #12 Hapyrus
パッケージングの今と未来
Pythonスタートアップ勉強会201109 python入門
PHP x AWS でスケーラブルなシステムをつくろう
PHPとJavaScriptの噺
smartFXにおけるApache Cordovaの活用について
Pykonjp2014
第2回名古屋SoftLayer勉強会 PBOX on SoftLayer
いまどき(これから)のPHP開発
Cake Matsuri Nanapi
Python & PyConJP 2014 Report
Foss4G 2015 Drupal Hands-on Session
Ad

Python charity talk in japan fastAPI introduction