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
150
Smaregi Tech Talk #1 REST API
実務でつまずくREST API
non_z250
October 16, 2019
Tweet
Share
Other Decks in Programming
See All in Programming
CSC307 Lecture 09
javiergs
PRO
1
840
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
460
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
200
Fluid Templating in TYPO3 14
s2b
0
130
CSC307 Lecture 07
javiergs
PRO
1
550
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6.1k
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
1k
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
610
[KNOTS 2026登壇資料]AIで拡張‧交差する プロダクト開発のプロセス および携わるメンバーの役割
hisatake
0
290
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
Data-Centric Kaggle
isax1015
2
780
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.2k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
57
50k
How STYLIGHT went responsive
nonsquared
100
6k
Are puppies a ranking factor?
jonoalderson
1
2.7k
Git: the NoSQL Database
bkeepers
PRO
432
66k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.3k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
180
So, you think you're a good person
axbom
PRO
2
1.9k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
52
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
430
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
140
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