Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
実務でつまずく REST API 2019/10/24
Slide 2
Slide 2 text
自己紹介 2 @non_z250 non’s Labo ( https://labo.nozomi.bike/ ) PHP / Laravel / CakePHP / Vue / Nuxt / C# Bike: Z250
Slide 3
Slide 3 text
自己紹介 3 普段は……? 今年の抱負メーカー (個人開発) (https://ambition.nozomi.bike/) トドTask (個人開発) (https://todo.nozomi.bike/) スマレジ本部機能開発 サーバーサイド担当
Slide 4
Slide 4 text
REST API 4 実践的なREST API
Slide 5
Slide 5 text
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}(参照)
Slide 6
Slide 6 text
REST API 6 マスターデータならとても簡単
Slide 7
Slide 7 text
REST API 7 実際には・・・
Slide 8
Slide 8 text
REST API 8 YYY XXX ZZZ このあたりを一括で 登録したいんやけどなぁ
Slide 9
Slide 9 text
REST API 9 多機能になるにつれ発生する
Slide 10
Slide 10 text
REST API 10 自作アプリでもあった
Slide 11
Slide 11 text
REST API 11 tasks notes tasks_notes tasks - タスク notes - ノート tasks_notes - 中間テーブル
Slide 12
Slide 12 text
REST API 12 tasks notes tasks_notes api/tasks_notes でリソースにアクセス???
Slide 13
Slide 13 text
REST API 13 解決策① テーブル=リソースではない
Slide 14
Slide 14 text
todo REST API 14 tasks notes tasks_notes [ POST ] api/todo { “task”: “新しいアプリを作る”, “note”: “LINE Bot を使いたい”, “status”: “1” }
Slide 15
Slide 15 text
REST API 15 解決策② 煩わしいAPIにしない
Slide 16
Slide 16 text
tasks notes tasks_notes [ POST ] api/tasksのResponse { “message”: “タスクの登録に成功。 ” } 16 REST API
Slide 17
Slide 17 text
[ POST ] api/notesのResponse { “id”: “1”, “note”: “LINE Bot を使いたい”, “status”: “1” } 17 REST API tasks notes tasks_notes
Slide 18
Slide 18 text
[ 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
Slide 19
Slide 19 text
REST API 19 解決策①のほうがスマートでいい
Slide 20
Slide 20 text
REST API 20 アイスブレイク
Slide 21
Slide 21 text
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 レファレンス協同 データベース
Slide 22
Slide 22 text
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が当たり前になりつつある そうなればこういう事件は起こらない
Slide 23
Slide 23 text
REST API 23 サービスを起動したいんやけ ど、リソースちゃうしなぁ 検索サービス
Slide 24
Slide 24 text
REST API 24 解決策 RESTにこだわりすぎない
Slide 25
Slide 25 text
REST API 25 検索サービス [ GET ] api/search { “users”: { “name”: “Z250”, }, “tasks”: { “task”: “Z250” }, “notes”: { “note”: “Z250” } }
Slide 26
Slide 26 text
REST API 26 検索サービス [ GET ] api/search?q=Z250 [ POST ] api/search [ PUT ] api/search [ DELETE ] api/search は無い
Slide 27
Slide 27 text
REST API 27 RESTにこだわりすぎない 使用者にわかりやすいように
Slide 28
Slide 28 text
REST API 28 エラー処理
Slide 29
Slide 29 text
REST API 29 エラーレスポンス { “error_code”: “404”, “error_message”: “このIDは存在しません” }
Slide 30
Slide 30 text
REST API 30 HTTP ステータスコードを使う 当たり前だけど、中々できない
Slide 31
Slide 31 text
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
Slide 32
Slide 32 text
REST API 32 エラーレスポンス [ GET ] api/users/99999999 HTTP_STATUS_CODE: 404 { “message”: “このIDは存在しません” }
Slide 33
Slide 33 text
最後に 33 - フロント言語の台頭で APIは更に重要に - 機械学習・統計のネタにされやすくなる - 食べログ - 天気予報 - 図書館 - リソースではなくサービスの提供もできる
Slide 34
Slide 34 text
実務でつまずく REST API Fin