Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
APIとはなにか
Search
mikan
December 19, 2024
Technology
0
94
APIとはなにか
非エンジニア向けにAPIとかWeb APIについて解説した資料
mikan
December 19, 2024
Tweet
Share
More Decks by mikan
See All by mikan
イベントをどう管理するか
mikanichinose
2
130
ライブラリでしかお目にかかれない珍しい実装
mikanichinose
2
370
Strong Skipping Mode によってrecompositionはどう変わったのか
mikanichinose
0
200
Modeling UiEvent
mikanichinose
0
41
UIの構成要素に関する考察
mikanichinose
0
39
再考: 監視可能オブジェクト
mikanichinose
0
55
マルチモジュール懐疑派だったかつての自分に送る マルチモジュールの効能
mikanichinose
0
200
書評: 単体テストの考え方/使い方
mikanichinose
0
230
ComposeでリストUIをDraggableにする方法
mikanichinose
0
1.2k
Other Decks in Technology
See All in Technology
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
36
14k
WACATE2024冬セッション資料(ユーザビリティ)
scarletplover
0
200
コンテナセキュリティのためのLandlock入門
nullpo_head
2
320
サーバレスアプリ開発者向けアップデートをキャッチアップしてきた #AWSreInvent #regrowth_fuk
drumnistnakano
0
190
20241214_WACATE2024冬_テスト設計技法をチョット俯瞰してみよう
kzsuzuki
3
470
TSKaigi 2024 の登壇から広がったコミュニティ活動について
tsukuha
0
160
Snowflake女子会#3 Snowpipeの良さを5分で語るよ
lana2548
0
230
新機能VPCリソースエンドポイント機能検証から得られた考察
duelist2020jp
0
220
LINEヤフーのフロントエンド組織・体制の紹介【24年12月】
lycorp_recruit_jp
0
530
第3回Snowflake女子会_LT登壇資料(合成データ)_Taro_CCCMK
tarotaro0129
0
190
バクラクのドキュメント解析技術と実データにおける課題 / layerx-ccc-winter-2024
shimacos
2
1.1k
あの日俺達が夢見たサーバレスアーキテクチャ/the-serverless-architecture-we-dreamed-of
tomoki10
0
460
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
A Philosophy of Restraint
colly
203
16k
Rails Girls Zürich Keynote
gr2m
94
13k
The Pragmatic Product Professional
lauravandoore
32
6.3k
Producing Creativity
orderedlist
PRO
341
39k
Being A Developer After 40
akosma
87
590k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
For a Future-Friendly Web
brad_frost
175
9.4k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Speed Design
sergeychernyshev
25
670
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
Transcript
APIとはなにか
API = Application Programming Interface ソフトウェアやライブラリ、サービスなどがそれを操作するためにユーザーに公開している関数や らクラスやらエンドポイントやら
fetch API (JS) 8 リソース取得のためのAP( 8 HTTP通信に使" 8 fetchという名前の関数
Notion API (Web API) Notionのページのあるブロックの 下に子ブロックを追加す HTTPリクエスR
PATCHリクエスR ヘッダー:通信を行うために必要 な情報を格納する場5 Authorizatio 認証情r Content-Typ$ レスポンスがjsonであるこ とを表W Notion-Versio Notion APIのバージョン
インターフェースとは?
インターフェース ↔ 実装 t インターフェースとはユーザーに公開している部' t 関数であれば関数名・引数・返りR t Web APIであればエンドポイント名、必要なヘッダー情報、
レスポンスの形 t インターフェースの反対は実i t インターフェースは実装をユーザーから隠すためにある
インターフェース ↔ 実装 インターフェース 実装 Input Output
なぜ実装をユーザーから隠す必要が あるのか
安定な挙動だけをユーザーに届ける ため
なぜ実装をユーザーから隠す必要があるのか 1度ユーザーに公開した部分は滅多なことでは変更できなくな なぜならユーザーからしたら、今日利用できている機能が明日にはパラメータが変わって使 えなくなるなんて状況は許容できなd しかし開発は継続的に行われているので実装は常に変化してい そうした安定な部分と不安定な部分を分けるための仕組みがインターフェースです
インターフェース 実装 安定 不安定
インターフェース = 抽象化
例えばNotion APIがGo言語で作られていたとして、Go言語向けにしかAPI を公開していないとすると... PHPやJSなど他の言語で作っているアプリからは操作ができない。。 しかし、HTTPをインターフェースとしたRESTfulなWeb APIとして作られ ている場合... PHPやJSなどどのようなプログラミング言語であってもHTTP通信するた めの基本的な機能は言語機能として、またはライブラリとして用意されて いるので、言語によらず操作可能になる
インターフェースによって抽象化することの恩恵 インターフェース:呼び出し側の都合を柔軟に受け入れてくれる 実装:実装者の好きにできる
Web APIについて
Web APIとは Web APIのなかでもとくにREST APIについて説明する REST AP HTTPをインターフェースとしたAP
HTTPリクエスk urp ヘッダ メソッ GET、POST、PATCH、DELET ボデg json、form-datG HTTPレスポンa ステータスコー 200、404、503..7 ヘッダ ボデg text、json、video、image ※REST以外のWeb APIの¾ RP SOA¥ XM§ 超複 GraphQ§ BFF(Backend For Frontend)でよく使われ オーバーフェッチング・アンダーフェッチング・ N+1問題を解決するために登場しv gRP Protocol Buffe マイクロサービス間の通信に用いられる REST: Web APIの設計思想
Web APIとは HTTPという方式を使ってネットワーク越しに呼び出せるようになったAPI Webアプリケーションとは誤解を恐れずに言うな! バックエンドをJSON生成 フロントエンドをJSON色付け係 として作ったアプリ
リクエスト データアクセス データ レスポンス(JSON) Webアプリケーションのクソ雑概略図
Web APIの中ではなにが起こって いるのか
Web API 典型的なWeb APIの動きを説明します Domain Domain Domain Domain Domain Dat@
7 D6 7 File request handler request handler request handler router リクエスト レスポンス
Web API 典型的なWeb APIの動きを説明します Domain Domain Domain Domain Domain Dat@
7 D6 7 File request handler request handler request handler router リクエスト http://localhost:3000/api/todos GET
Web API 典型的なWeb APIの動きを説明します Domain Domain Domain Domain Domain Dat@
7 D6 7 File request handler request handler request handler router リクエスト http://localhost:3000/api/todos GET GET, /api/todos を担当するリクエストハンドラー
Web API 典型的なWeb APIの動きを説明します Domain Domain Domain Domain Domain Dat@
7 D6 7 File request handler request handler request handler router リクエスト http://localhost:3000/api/todos GET GET, /api/todos を担当するリクエストハンドラー
Web API 典型的なWeb APIの動きを説明します Domain Domain Domain Domain Domain Dat@
7 D6 7 File request handler request handler request handler router リクエスト http://localhost:3000/api/todos GET GET, /api/todos を担当するリクエストハンドラー
Web API 典型的なWeb APIの動きを説明します Domain Domain Domain Domain Domain Dat@
7 D6 7 File request handler request handler request handler router リクエスト http://localhost:3000/api/todos GET GET, /api/todos を担当するリクエストハンドラー
Web API 典型的なWeb APIの動きを説明します Domain Domain Domain Domain Domain Dat@
7 D6 7 File request handler request handler request handler router リクエスト http://localhost:3000/api/todos GET GET, /api/todos を担当するリクエストハンドラー
Web API 典型的なWeb APIの動きを説明します Domain Domain Domain Domain Domain Dat@
7 D6 7 File request handler request handler request handler router リクエスト http://localhost:3000/api/todos GET GET, /api/todos を担当するリクエストハンドラー
Web API 典型的なWeb APIの動きを説明します Domain Domain Domain Domain Domain Dat@
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がどうにかこうにか描画する