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

仕事でWeb API開発するときに考えていること / 技育CAMPアカデミア2023

仕事でWeb API開発するときに考えていること / 技育CAMPアカデミア2023

2023年5月10日(水) サポーターズ主催「技育CAMPアカデミア」で開催されたCARTA HOLDINGSセッションの発表資料です。

・登壇者
株式会社CARTA HOLDINGS
所属: 株式会社fluct アドプラットホーム事業本部 データエンジニアリングチーム
名前: 鈴木 進也 (すずき しんや)
twitterアカウント: @YangYang_pareto
自己紹介: fluctというアドテクの会社でWeb API開発をしたりデータエンジニアリングをしています。三度の飯よりキーボードが好きです。

CARTA Engineering

May 10, 2023
Tweet

More Decks by CARTA Engineering

Other Decks in Technology

Transcript

  1. 人が学習する際にかかる記憶領域に対する負荷 • 開発には様々な認知負荷がかかる ◦ コードの意図を読み取る、アーキテクチャの理解 etc… • A Philosophy of

    Software Design では、ソフトウェアの複雑性が増大している兆候の一つとしてあ げられている • 自分は普段の開発で認知負荷が高くなりすぎていないか?を気にしている 認知負荷とは CARTA HOLDINGS Inc.
  2. • レイヤードアーキテクチャ • ヘキサゴナルアーキテクチャ • オニオンアーキテクチャ • クリーンアーキテクチャ • etc…

    よく目にするアーキテクチャたち CARTA HOLDINGS Inc. [画像の出典] Ready for changes with Hexagonal Architecture, Clean Architecture
  3. • handler: HTTP リクエストを受けてレスポンス返す • repository: DBとやりとりする • entity: アプリケーションで扱うオブジェクトを定義する

    例えば CARTA HOLDINGS Inc. handler repository entity DB 依存の流れ 単にCRUDするだけならこれくらい素朴な構成でもよい
  4. • 認知負荷が低い ◦ 触りたい実装がどこにあるか把握しやすい ◦ e.g.) DB周りはrepository層をみればいい • 変更しやすい ◦

    どこを修正すればいいか明確 • 壊れたときに直しやすい ◦ どこで壊れたか特定しやすい 各層が1つの関心事だけを扱っていると何が嬉しい? CARTA HOLDINGS Inc.
  5. • レイヤー構造を成すので、レイヤー間に 依存関係が生まれる • 依存とは ◦ 依存される側の知識が依存する側に漏れ出ている状態 ◦ メソッドの呼び出しに必要な引数とか •

    依存される側に変更が入ると、する側も影響を受ける ◦ あるモジュールが依存したりされまくったりしている(密結合)と辛い 依存関係 CARTA HOLDINGS Inc.
  6. • 依存の向きを交通整理する • 具体的な関心事を扱うレイヤー → 抽象的な関心事を扱うレイヤーという依存の流れを作る ◦ 具体的な関心事: 特定の技術に関すること (DBとかGraphQLとか...)

    ◦ 抽象的な関心事: アプリケーションが扱うドメインコアなこと (ビジネスロジックとか ...) 依存の流れを1方向にする CARTA HOLDINGS Inc.
  7. APIをどういう形式で提供するかは、いくつか選択肢がある • REST ◦ リソースベースのURI ◦ JSON形式でデータをやり取りする ◦ 長いこと使われてる •

    gRPC ◦ Protobuf形式でやり取りする ◦ マイクロサービス間の通信とかで使われてる • GraphQL ◦ クエリ言語 + クエリに対するサーバーサイド実装 ◦ クエリする側が柔軟に欲しいデータを持ってこれる APIのスタイル CARTA HOLDINGS Inc.
  8. • APIの利用者 ◦ 誰が使うんだっけ ◦ どのくらい使われるんだっけ • ユースケースの数 ◦ 利用者が多様でユースケースも様々なんだよねーとか

    • サービス的になにを重要視するか ◦ APIとしての柔軟性? ◦ パフォーマンス? etc… どういう軸で考えるのか CARTA HOLDINGS Inc.
  9. • REST ◦ リソースベースでエンドポイントを生やすので、 1つのAPIで色々なユースケースに対応しよう とすると辛くなりがち ◦ 1APIのユースケースが単純ならわかりやすい • GraphQL

    ◦ クエリによって利用者側が柔軟に欲しいデータを記述できるのでユースケースが多様な場合 に対応しやすい ◦ エラーハンドリングが難しい • gRPC ◦ パフォーマンス重視ならこれかな ◦ 内部向けのAPIかくなら、型もかっちり書けるしよさげ ざっくりとした私の所感 CARTA HOLDINGS Inc.
  10. 右図のような構造で、以下のことを考えてみる • 何のテストを書きたいか • 何のテストを書かないか 各レイヤーの関心事 • handler: HTTP req/res

    • usecase: ビジネスロジック • repository: DBとのやりとり • entiry: ビジネスオブジェクトとその振る舞い 例 CARTA HOLDINGS Inc.
  11. もの創り実践プログラム 「Treasure」 • 内容 「Go言語を使って学ぶ、 価値のあるもの創りとチーム開発」 • 日時 8/7~8/25(10:00~18:30) •

    形式 オンライン+オフィス開催(渋谷) • 定員:30名程度 • 学年:2025年4月以降に入社可能な方       ※文理不問、条件に合えば学年不問
  12. 大規模サービス構築プログラム 「Sunrise」 • 内容 Goの広告アプリケーションサーバを AWSに構築し、改修 大規模リクエストを捌くために必要な 設計・構築について学べます • 日時

    9/11~9/15(10:00~18:30) • 形式 オフライン開催(渋谷オフィス) • 定員:16名程度 • 学年:2025年4月以降に入社可能な方       ※文理不問、条件に合えば学年不問