Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FARM スタックに触れてみる

takf
February 09, 2022

FARM スタックに触れてみる

2022.02.08 Saitama.js #2 LT

takf

February 09, 2022
Tweet

More Decks by takf

Other Decks in Technology

Transcript

  1. 自己紹介 Takeru Furuichi (@takfjp) 川越市出身です ( オススメのお店:寿製麺よしかわ) https://www.kotobukiseimen.com/ コネヒト株式会社 所属

    「ママリ」という出産・育児領域のサービスを開発・運営してい ます フロント: React バックエンド: CakePHP
  2. FastAPI とは Python 製のAPI フレームワーク (v3.6 以上) https://fastapi.tiangolo.com/ja/ 名前の通り高速 Request,

    Response 共に型定義が可能 SwaggerUI でAPI のドキュメントを自動生成できる <- !!
  3. FastAPI 側で用意するもの router REST API のエンドポイントを記載 schema エンドポイント向けに Request, Response

    の型定義 DB に格納するModel の型定義 controller アクセス時の DB への操作 router に読み込ませる
  4. schema from pydantic import BaseModel from typing import Optional from

    decouple import config # BaseModel = FastAPI のスキーマモデル class Todo(BaseModel): id: str title: str description: str class TodoBody(BaseModel): title: str description: str
  5. controller (database) from decouple import config ~~~ 中略 ~~~ #

    async / await で手軽に非同期通信処理を記述できる async def db_create_todo(data: dict) -> Union[dict, bool]: todo = await collection_todo.insert_one(data) new_todo = await collection_todo.find_one({"_id": todo.inserted_id}) if new_todo: return todo_serializer(new_todo) return False
  6. router from fastapi import APIRouter, Response, Request, HTTPException from schemas

    import Todo, TodoBody from database import db_create_todo from starlette.status import HTTP_201_CREATED router = APIRouter() @router.post("/api/todo", response_model=Todo) async def create_todo(request: Request, response: Response, data: TodoBody): todo = jsonable_encoder(data) res = await db_create_todo(todo) response.status_code = HTTP_201_CREATED if res: return res raise HTTPException( status_code=404, detail="Create task failed")
  7. 雑感 API も独力で実装したい時にとても協力 フロントエンドエンジニアだって API を作りたい Mongo DB + FastAPI

    は GraphQL とも親和性が高そう SwaggerUI を自動生成してくれるのはとても嬉しい API 側で型定義できるので TypeScript との親和性も高い Todo List 以外でも活用したくなる