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
Smaregi Tech Talk #1 REST API
Search
non_z250
October 16, 2019
Programming
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Smaregi Tech Talk #1 REST API
実務でつまずくREST API
non_z250
October 16, 2019
Other Decks in Programming
See All in Programming
どこまでゆるくて許されるのか
tk3fftk
0
520
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
6.7k
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
2
620
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
530
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
180
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
2.9k
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
610
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
630
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
140
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
140
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
150
Featured
See All Featured
Abbi's Birthday
coloredviolet
3
8.8k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
220
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
260
Into the Great Unknown - MozCon
thekraken
41
2.6k
Utilizing Notion as your number one productivity tool
mfonobong
4
450
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Mobile First: as difficult as doing things right
swwweet
225
10k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
590
Bash Introduction
62gerente
615
220k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
410
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Transcript
実務でつまずく REST API 2019/10/24
自己紹介 2 @non_z250 non’s Labo ( https://labo.nozomi.bike/ ) PHP /
Laravel / CakePHP / Vue / Nuxt / C# Bike: Z250
自己紹介 3 普段は……? 今年の抱負メーカー (個人開発) (https://ambition.nozomi.bike/) トドTask (個人開発) (https://todo.nozomi.bike/) スマレジ本部機能開発
サーバーサイド担当
REST API 4 実践的なREST API
REST API 5 よくあるやつ products [ GET ] api/products (参照)
[ POST ] api/products (登録) [ PUT ] api/products/{:id} (更新) [ GET ] api/products/{:id} (参照) [ DELETE ] api/products/{:id} (削除) [ GET ] api/products/{:id},{:id},{:id}(参照)
REST API 6 マスターデータならとても簡単
REST API 7 実際には・・・
REST API 8 YYY XXX ZZZ このあたりを一括で 登録したいんやけどなぁ
REST API 9 多機能になるにつれ発生する
REST API 10 自作アプリでもあった
REST API 11 tasks notes tasks_notes tasks - タスク notes
- ノート tasks_notes - 中間テーブル
REST API 12 tasks notes tasks_notes api/tasks_notes でリソースにアクセス???
REST API 13 解決策① テーブル=リソースではない
todo REST API 14 tasks notes tasks_notes [ POST ]
api/todo { “task”: “新しいアプリを作る”, “note”: “LINE Bot を使いたい”, “status”: “1” }
REST API 15 解決策② 煩わしいAPIにしない
tasks notes tasks_notes [ POST ] api/tasksのResponse { “message”: “タスクの登録に成功。
” } 16 REST API
[ POST ] api/notesのResponse { “id”: “1”, “note”: “LINE Bot
を使いたい”, “status”: “1” } 17 REST API tasks notes tasks_notes
[ POST ] api/notesのResponse { “id”: “1”, “note”: “LINE Bot
を使いたい”, “status”: “1” } [ POST ] api/tasks { “id”: “1”, “task”: “新しいアプリを作る”, “status”: “1”, “note_id”: “1” } 18 REST API tasks notes tasks_notes
REST API 19 解決策①のほうがスマートでいい
REST API 20 アイスブレイク
REST API 21 図書館API https://calil.jp/doc/api.html ISBNが元になっている。 専用データベースや、jsライブ ラリも提供している。 https://www.ndl.go.jp/jp/us e/api/index.html
国立国会図書館の公式サー ビス。 加盟する全国の図書館から情 報を取得できる。 http://crd.ndl.go.jp/referenc e/ 国立国会図書館に関連する 組織のAPI。 カーリル 国立図書館API レファレンス協同 データベース
REST API 22 岡崎市立中央図書館事件 https://ja.wikipedia.org/wiki/%E5%B2%A1%E5%B4%8E%E5%B8%82%E7%AB%8B%E4%B8%AD%E5%A4%AE%E5%9B%B 3%E6%9B%B8%E9%A4%A8%E4%BA%8B%E4%BB%B6 APIが当たり前になりつつある そうなればこういう事件は起こらない
REST API 23 サービスを起動したいんやけ ど、リソースちゃうしなぁ 検索サービス
REST API 24 解決策 RESTにこだわりすぎない
REST API 25 検索サービス [ GET ] api/search { “users”:
{ “name”: “Z250”, }, “tasks”: { “task”: “Z250” }, “notes”: { “note”: “Z250” } }
REST API 26 検索サービス [ GET ] api/search?q=Z250 [ POST
] api/search [ PUT ] api/search [ DELETE ] api/search は無い
REST API 27 RESTにこだわりすぎない 使用者にわかりやすいように
REST API 28 エラー処理
REST API 29 エラーレスポンス { “error_code”: “404”, “error_message”: “このIDは存在しません” }
REST API 30 HTTP ステータスコードを使う 当たり前だけど、中々できない
200 OK - GET, PUT, PATCH, DELETE リクエストが成功した場合に応答。もしくは、 POST リクエストが結果的に何もリソースを作らなかった場合に応答。
201 Created - POST リクエストがリソース作成に成功した場合に応答。なお、そのリソースへのリンクを Location ヘッダに含める必要がある。 204 No Content - 成功したDELETE リクエストで、ボディを返したくない場合に応答 301 Moved Permanently - 恒久的移動 304 Not Modified - HTTP キャッシュが有効な場合に応答 400 Bad Request - パース不可能なリクエストボディが来た場合に応答 401 Unauthorized - 認証がされていない、もしくは不正なトークンの場合に応答 403 Forbidden - 認証はされているが、認可されていないリソースへのリクエストに応答 404 Not Found - 存在しないリソースへのリクエストに応答 405 Method Not Allowed - 認可されていないメソッドでのリクエストに応答 410 Gone - 今は存在しないリソース(廃止された APIなど)で空要素を返す場合などに応答 415 Unsupported Media Type - 対応していない MediaType が指定された場合に応答 422 Unprocessable Entity - バリデーションエラーに対して応答 429 Too Many Requests - 回数制限をオーバーしたリクエストに対して応答 REST API 31
REST API 32 エラーレスポンス [ GET ] api/users/99999999 HTTP_STATUS_CODE: 404
{ “message”: “このIDは存在しません” }
最後に 33 - フロント言語の台頭で APIは更に重要に - 機械学習・統計のネタにされやすくなる - 食べログ -
天気予報 - 図書館 - リソースではなくサービスの提供もできる
実務でつまずく REST API Fin