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