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
0
84
Smaregi Tech Talk #1 REST API
実務でつまずくREST API
non_z250
October 16, 2019
Tweet
Share
Other Decks in Programming
See All in Programming
Creating a Free Video Ad Network on the Edge
mizoguchicoji
0
120
Jakarta EE meets AI
ivargrimstad
0
560
OnlineTestConf: Test Automation Friend or Foe
maaretp
0
110
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
9
3.3k
ペアーズにおけるAmazon Bedrockを⽤いた障害対応⽀援 ⽣成AIツールの導⼊事例 @ 20241115配信AWSウェビナー登壇
fukubaka0825
6
1.9k
色々なIaCツールを実際に触って比較してみる
iriikeita
0
330
watsonx.ai Dojo #4 生成AIを使ったアプリ開発、応用編
oniak3ibm
PRO
1
120
Macとオーディオ再生 2024/11/02
yusukeito
0
370
Jakarta EE meets AI
ivargrimstad
0
170
Streams APIとTCPフロー制御 / Web Streams API and TCP flow control
tasshi
2
350
Hotwire or React? ~アフタートーク・本編に含めなかった話~ / Hotwire or React? after talk
harunatsujita
1
120
Remix on Hono on Cloudflare Workers
yusukebe
1
290
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
370
Designing Experiences People Love
moore
138
23k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
What's new in Ruby 2.0
geeforr
343
31k
The Art of Programming - Codeland 2020
erikaheidi
52
13k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
93
Embracing the Ebb and Flow
colly
84
4.5k
Building Adaptive Systems
keathley
38
2.3k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
120
What's in a price? How to price your products and services
michaelherold
243
12k
Automating Front-end Workflow
addyosmani
1366
200k
YesSQL, Process and Tooling at Scale
rocio
169
14k
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