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

Web APIをなぜつくるのか

mikan
December 19, 2024

Web APIをなぜつくるのか

非エンジニア向けにAPIとかWeb APIについて解説した資料

mikan

December 19, 2024
Tweet

More Decks by mikan

Other Decks in Technology

Transcript

  1. 「データ ユーザー情 記事一覧情 商品詳細情 クーポン情報 Reactを使った動的なアプリケーションの動I

    FD データの取得および表示 不思議な力でどこかから 取ってくる デザイン通り€ 仕様に沿った形式の HTML
  2. 自宅 社内 もしくは クラウド サーバという名の門番を立てる ユーザーに対する見せ方だけ気にす ればいい 通信に必要な最低限の情報だけサー バに渡せばあとは向こうでよしなに やってくれる

    セキュリティとかビジネスルールの実 現とかの役割を負う ユーザーへの見せ方とかは知らん フロントにデータを投げればあとは よしなに加工してくれるだろう
  3. 自宅 社内 もしくは クラウド バックエンドがすべて を行っていたので、 開発効率を下げないた めにMVCというアーキ テクチャで作ることに なる

    – リクエストを受け付け€ – DBからデータを取ってく€ – データを加工したりするロジックの実X – 加工後のデータを使ってHTMLの作成 リソースくれ HTML
  4. 自宅 社内 もしくは クラウド ボタン押した 更新後のHTML ボタンをクリックしたときに「どのURL」に対して「どういうデータ形式」でフォームを送信すればいいか はフレームワークがサポートしているテンプレートエンジンのおかげで気にしなくて良かったりする ~ リクエストを受け付けn

    ~ DBからデータを取ってくn ~ データを加工したりするロジックの実ˆ ~ 加工後のデータを使ってHTMLの作成 ※ テンプレートエンジン → プログラムから渡されたデータを組み込めるHTMLのすごいやつ
  5. y 文字p y “Hello Worldb y 数Y y 1, 2,

    T y 0.1, 1.Q y 真理Y y true/falsd y nult y nult y オブジェク0 y { “key”: “value” H y { “name”: “mikan”, “age”: 28 ! y 配p y [1, 2, 3, “Hello”, true] ↑ これらを自由に組み合わせて作ったものがJSON > JavaScript Object Notation(JSON、ジェイソン) はデータ記述言語の1つである。軽量なテキストベース のデータ交換用フォーマットでありプログラミング言語 を問わず利用できる[1]。名称と構文はJavaScriptにおけ るオブジェクトの表記法に由来する。 JSON
  6. フロントエンドエンジニア バックエンドエンジニア Web APIの仕様をどうするか話し合う Œ 「〇〇についてのデータが必要なのでエンドポイント を作らないといけないですねd Œ 「返すときは{“name”: string,

    “age”: number}って いう形にしてほしいですd Œ 「エラーしたときはどうする?d Œ 「△△のデータについて仕様変更があって□□ってい う情報を追加してほしいですd Œ 「◎◎っていうデータってどこからもってきたらいい ですかね?d Œ 「それならエンドポイントAから取れるよd Œ 「なるほど。エンドポイントAにアクセスするため には▲▲のIDが必要で、それはエンドポイントBを から取れて、エンドポイントBにアクセスするため には◆◆っていう文字列が必要でここはユーザー データがあれば取ってこれるからd Œ 「◆◆→エンドポイントB→▲▲→エンドポイント Aっていうフローを書けば取ってこれるな」
  7.  作ろうとしているものについての深い理解(ドメイン理解ž  適当に作るとあとで痛い目にあいまˆ  要件を素直に実装してしまうと既存実装とか次の新規実装との整合性が壊れていく可能性があ  ex.「価格」は果たして素直に「価格」と解釈してしまってよいのかƒ  表示価格・割引価格・会員価格・税抜き・税込み...et`

     要件を咀嚼してソフトウェアとして実装可能なものに再解釈する必要がありまˆ  画面に関する設½  画面に必要な情報の設½  画面で発生するアクションとそれによる状態変i  状態の不整合を発生させないための不変条件の整´  APIに関する設½  既存のAPIにフィールド追加する vs. 新しいAPIを作る をきちんと判断す  フロントにとってもバックにとっても辛くないAPIを設計す  安全š  パフォーマン  オーバーフェッチング/アンダーフェッチンP  n+1問s  時には作らないことを決断する意È  作れば作るほどデータもロジックも画面もこんがらがっていくのでどんどん作りにくくなりまˆ  不要なものは作らないほうが時には懸命でˆ  「システムを一番速くてコストダウンも出来る方法は超絶技巧のプログラミングではなく、ビジネスロジックを 単純にすること。」
  8. Notion API (Web API) ‘ Notionのページのあるブロックの 下に子ブロックを追加すe ‘ HTTPリクエスE ‘

    PATCHリクエスE ‘ ヘッダー:通信を行うために必要 な情報を格納する場d ‘ Authorizatiow ‘ 認証情6 ‘ Content-Typ$ ‘ リクエストデータがjsonで あることを表W ‘ Notion-Versiow ‘ Notion APIのバージョン
  9. Web APIとは Web APIのなかでもとくにREST APIについて説明する REST AP— • HTTPをインターフェースとしたAP— •

    HTTPリクエスe • ur… • ヘッダ‡ • メソッW • GET、POST、PATCH、DELETr • ボデQ • json、form-dati • HTTPレスポン‘ • ステータスコーW • 200、404、503..E • ヘッダ‡ • ボデQ • text、json、video、image ※REST以外のWeb APIの© • RPÈ • SOA¼ • XM³ • 超複Ÿ • GraphQ³ • BFF(Backend For Frontend)でよく使われ— • オーバーフェッチング・アンダーフェッチング・ N+1問題を解決するために登場し¶ • gRPÈ • Protocol Buffe™ • マイクロサービス間の通信に用いられる REST: Web APIの設計思想
  10. Web API 典型的なWeb APIの動きを説明します Domain Domain Domain Domain Domain DatA

    7 D6 7 File request handler request handler request handler router リクエスト レスポンス
  11. Web API 典型的なWeb APIの動きを説明します Domain Domain Domain Domain Domain DatA

    7 D6 7 File request handler request handler request handler router リクエスト レスポンス リクエストを適切なハンド ラーに仲介してくれるやつ 特定のリクエストを処理す る役目を負ったやつ ビジネスロジックを実行 する場所 データの保存場所
  12. Web API 典型的なWeb APIの動きを説明します Domain Domain Domain Domain Domain DatA

    7 D6 7 File request handler request handler request handler router リクエスト http://localhost:3000/api/todos GET
  13. Web API 典型的なWeb APIの動きを説明します Domain Domain Domain Domain Domain DatA

    7 D6 7 File request handler request handler request handler router リクエスト http://localhost:3000/api/todos GET GET, /api/todos を担当するリクエストハンドラー
  14. Web API 典型的なWeb APIの動きを説明します Domain Domain Domain Domain Domain DatA

    7 D6 7 File request handler request handler request handler router リクエスト http://localhost:3000/api/todos GET GET, /api/todos を担当するリクエストハンドラー
  15. Web API 典型的なWeb APIの動きを説明します Domain Domain Domain Domain Domain DatA

    7 D6 7 File request handler request handler request handler router リクエスト http://localhost:3000/api/todos GET GET, /api/todos を担当するリクエストハンドラー
  16. Web API 典型的なWeb APIの動きを説明します Domain Domain Domain Domain Domain DatA

    7 D6 7 File request handler request handler request handler router リクエスト http://localhost:3000/api/todos GET GET, /api/todos を担当するリクエストハンドラー
  17. Web API 典型的なWeb APIの動きを説明します Domain Domain Domain Domain Domain DatA

    7 D6 7 File request handler request handler request handler router リクエスト http://localhost:3000/api/todos GET GET, /api/todos を担当するリクエストハンドラー
  18. Web API 典型的なWeb APIの動きを説明します Domain Domain Domain Domain Domain DatA

    7 D6 7 File request handler request handler request handler router リクエスト http://localhost:3000/api/todos GET GET, /api/todos を担当するリクエストハンドラー
  19. Web API 典型的なWeb APIの動きを説明します Domain Domain Domain Domain Domain DatA

    7 D6 7 File request handler request handler request handler router リクエスト http://localhost:3000/api/todos GET GET, /api/todos を担当するリクエストハンドラー レスポンス [ {“id”: 1, “title”: “TODO1”, “createdAt”: “2024-01-01 12:00:00”}, {“id”: 2, “title”: “TODO2”, “createdAt”: “2024-01-01 13:15:00”} ] → 受け取ったJSONをもとにReactがどうにかこうにか描画する