Successfully reported this slideshow.
Your SlideShare is downloading. ×

RESTful Web Application by Laravel

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 54 Ad

More Related Content

Recently uploaded (20)

Advertisement

RESTful Web Application by Laravel

  1. 1. RESTful Web Application by Laravel LT会 in php勉強会 @yoshitaro_yoyo
  2. 2. 1. 今日の目標 2. REST 3. LaravelとRESTful 4. HTTPメソッド 5. 安全性と冪等性 6. 小ネタ 今日のアジェンダ
  3. 3. 1.今日の目標 2. REST 3. LaravelとRESTful 4. HTTPメソッド 5. 安全性と冪等性 6. 小ネタ 今日のアジェンダ
  4. 4. •Laravel で RESTful な Web アプリ を作れる •各 HTTP メソッドの使い分け •安全性と冪等性、そしてその重要性 1.今日の目標
  5. 5. 1. 今日の目標 2.REST 3. LaravelとRESTful 4. HTTPメソッド 5. 安全性と冪等性 6. 小ネタ 今日のアジェンダ
  6. 6. RESTful な Web アプリとは 2. REST
  7. 7. REST原則に則ったWeb アプリ
  8. 8. What is REST?
  9. 9. 1.アドレス可能性 最も重要。URIを通じ、リソースを端的に指し示すことができる性質。すべての情報が一意なURIで表現さ れるようにすること。これが無いと接続性と統一インターフェースは実現できません 2.接続性 あるリソースに「別のリソースへのリンク」を含めることができ、リンクを含めることで「別のリソースに 接続すること」ができること。 3.統一インターフェース リソースの取得、作成、更新、削除といった操作は、すべてHTTPメソッドを利用すること。この場合の得 「GET」「POST」「PUT」、削除「DELETE」上記2つの性質が保証されて初めて価値の出る性質 4.ステートレス性 すべてのHTTPリクエストが完全に分離している性質であり、セッションなどの状態管理は行われないこ と。実際はそこまで重要ではない。WebサービスではCookieによるセッション管理が必須だから RESTの4原則
  10. 10. •REpresentational State Transferの略 •Representation は 表現 •State = 状態 •Transfer = 転送 •表現とは、Webサーバの送信するResourcesの形式 •Resourcesとは、Web上に存在する情報、データのこと REST
  11. 11. •Web上に存在する、名前を持ったありとあらゆる情報 •世界中のResourcesは、URIで一意の名前を持つ •URIとは「Uniform Resource Identifier」の略  統一リソース識別子といい、Resourcesを識別するID •URIを用いることで、プログラムはResourcesが表現す る情報にアクセス可能(アドレス可能性) ex. http://www.example.com:8080/news/index.htm? page=2&msg=yes#hot Resourcesって何??
  12. 12. •Web上に存在する、名前を持ったありとあらゆる情報 •世界中のResourcesは、URIで一意の名前を持つ •URIとは「Uniform Resource Identifier」の略  統一リソース識別子といい、Resourcesを識別するID •URIを用いることで、プログラムはResourcesが表現す る情報にアクセス可能(アドレス可能性) ex. http://www.example.com:8080/news/index.htm? page=2&msg=yes#hot Resourcesって何??
  13. 13. 1. 今日の目標 2. REST 3.Laravelと RESTful 4. HTTPメソッド 5. 安全性と冪等性 6. 小ネタ 今日のアジェンダ
  14. 14. • Routing 特定アドレスが特定HTTPメソッドでリク エストされた際、指定したコントローラの 指定したメソッドを呼び出すという仕組み 3. LaravelとRESTful な Web アプリ
  15. 15. REST Controller と Routing
  16. 16. REST ではない Web アプリ RESTful な Web アプリ
  17. 17. RESTful な Web アプリ
  18. 18. RESTful な Web アプリ
  19. 19. 1. 今日の目標 2. REST 3. LaravelとRESTful 4.HTTP   メソッド 5. 安全性と冪等性 6. 小ネタ 今日のアジェンダ
  20. 20. 4. HTTPメソッド メソッド 意味 GET リソースの取得 POST リソースの作成、データ追加、その他処理 PUT リソースの作成、更新 PATCH リソースの部分置換 DELETE リソースの削除 HEAD リソースのヘッダ (メタデータの取得) OPTIONS リソースがサポートしているメソッドの取得 TRACE プロキシ動作の確認 CONECT プロキシ動作のトンネル接続への変更 CRUD名 意味 メソッド (参考)SQL Create 作成 POST(PUT) insert Read 読み込み GET select Update 更新 PUT(PATCH) update Delete 削除 DELETE delete
  21. 21. ん?
  22. 22. 4. HTTPメソッド メソッド 意味 GET リソースの取得 POST リソースの作成、データ追加、その他処理 PUT リソースの作成、更新 PATCH リソースの部分置換 DELETE リソースの削除 HEAD リソースのヘッダ (メタデータの取得) OPTIONS リソースがサポートしているメソッドの取得 TRACE プロキシ動作の確認 CONECT プロキシ動作のトンネル接続への変更 CRUD名 意味 メソッド (参考)SQL Create 作成 POST(PUT) insert Read 読み込み GET select Update 更新 PUT(PATCH) update Delete 削除 DELETE delete
  23. 23. 4. HTTPメソッド メソッド 意味 GET リソースの取得 POST リソースの作成、データ追加、その他処理 PUT リソースの作成、更新 PATCH リソースの部分置換 DELETE リソースの削除 HEAD リソースのヘッダ (メタデータの取得) OPTIONS リソースがサポートしているメソッドの取得 TRACE プロキシ動作の確認 CONECT プロキシ動作のトンネル接続への変更 CRUD名 意味 メソッド (参考)SQL Create 作成 POST(PUT) insert Read 読み込み GET select Update 更新 PUT(PATCH) update Delete 削除 DELETE delete
  24. 24. 4. HTTPメソッド メソッド 意味 GET リソースの取得 POST リソースの作成、データ追加、その他処理 PUT リソースの作成、更新 PATCH リソースの部分置換 DELETE リソースの削除 HEAD リソースのヘッダ (メタデータの取得) OPTIONS リソースがサポートしているメソッドの取得 TRACE プロキシ動作の確認 CONECT プロキシ動作のトンネル接続への変更 CRUD名 意味 メソッド (参考)SQL Create 作成 POST(PUT) insert Read 読み込み GET select Update 更新 PUT(PATCH) update Delete 削除 DELETE delete やってること一緒?
  25. 25. PUT メソッドと POST メソッドの違い POST PUT リソースの 作成 ⭕ ⭕ リソースの URI指定 ❌ ⭕ URIの 決定権 サーバ側 クライアント側 サーバとの 結合度 疎 密 向いてる Webサービス Twitter Wikipedia 基本的な 使用方法 リソース新規作成 リソース更新
  26. 26. 1. 今日の目標 2. REST 3. LaravelとRESTful 4. HTTPメソッド 5.安全性と     冪等性 6. 小ネタ 今日のアジェンダ
  27. 27. 5. 安全性と冪等性 安全性 冪等性 リソースの状態を変化させず 読み取り専用のもの。 リクエストしても単にその時点で のリソースの表現を取得している だけ。GETは安全 同じ操作を繰り返しても結果が同じ ↓ 「同一パラメーターで 1 回以上リ クエストしても、リソースの状態が 同じであること」 PUTやDELETEは冪等 クライアントが未知のURIにアク セスしても害がないことある程度 保証できる システム堅牢性、情報整合性、ク ライアントにリクエストのリトラ イ可否を通知
  28. 28. 各HTTPメソッドの対応 安全性 冪等性 GET ⭕ ⭕ POST ❌ ❌ PUT ❌ ⭕ DELETE ❌ ⭕ HEAD ⭕ ⭕
  29. 29. 本来の「冪等」の目的 WebServer WebClient
  30. 30. 本来の「冪等」の目的 WebServer WebClient リクエスト
  31. 31. 本来の「冪等」の目的 WebServer WebClient リクエスト ①リクエストし成功
  32. 32. 本来の「冪等」の目的 WebServer WebClient リクエスト ①リクエストし成功
  33. 33. 本来の「冪等」の目的 WebServer WebClient リクエスト ❌ ①リクエストし成功
  34. 34. 本来の「冪等」の目的 WebServer WebClient ②通信障害により レスポンスが届かない リクエスト ❌ ①リクエストし成功
  35. 35. 本来の「冪等」の目的 WebServer WebClient ②通信障害により レスポンスが届かない リクエスト ❌ リクエストリトライ ①リクエストし成功
  36. 36. 本来の「冪等」の目的 WebServer WebClient ②通信障害により レスポンスが届かない リクエスト ❌ リクエストリトライ ③サーバはリトライによる リソースの不整合から保護 しなくてはいけない ①リクエストし成功
  37. 37. 本来の「冪等」の目的 WebServer WebClient ②通信障害により レスポンスが届かない リクエスト ❌ リクエストリトライ ③サーバはリトライによる リソースの不整合から保護 しなくてはいけない ④リトライによるリソース の整合性が保証されなくては むやみにリトライできない ①リクエストし成功
  38. 38. 本来の「冪等」の目的 WebServer WebClient ②通信障害により レスポンスが届かない リクエスト ❌ リクエストリトライ ③サーバはリトライによる リソースの不整合から保護 しなくてはいけない ④リトライによるリソース の整合性が保証されなくては むやみにリトライできない ①リクエストし成功 冪等性
  39. 39. 本来の「冪等」の目的 WebServer WebClient ②通信障害により レスポンスが届かない リクエスト ❌ リクエストリトライ ③サーバはリトライによる リソースの不整合から保護 しなくてはいけない ④リトライによるリソース の整合性が保証されなくては むやみにリトライできない ①リクエストし成功 冪等性 同じ操作を繰り返しても結果が同じ 同一パラメーターで 1 回以上リクエストしても、
  40. 40. 本来の「冪等」の目的 WebServer WebClient ②通信障害により レスポンスが届かない リクエスト ❌ リクエストリトライ ③サーバはリトライによる リソースの不整合から保護 しなくてはいけない ④リトライによるリソース の整合性が保証されなくては むやみにリトライできない ①リクエストし成功 冪等性 同じ操作を繰り返しても結果が同じ 同一パラメーターで 1 回以上リクエストしても、 リソースの状態が 同じであること
  41. 41. 1. 今日の目標 2. REST 3. LaravelとRESTful 4. HTTPメソッド 5. 安全性と冪等性 6.小ネタ 今日のアジェンダ
  42. 42. 1. HTMLのFORMで指定できるのはGETと POSTだけ 2. Aタグは基本的にGETしか使えない 3. Validationエラーの戻り値もGETのみ 4. 論理削除はDELETEではなくPUTが適切? 6. 小ネタ
  43. 43. 余談、最後に 2005年、Googleがリリースしたとあるツール。 Web上にはデータを削除するサーバ処理をGETメソッドで受け付けていた ため(GETでDELETE実装した)アプリが多数存在していた。それらがGoogle のクローラに補足された結果、大量にデータを消されてしまうということが 起きた。GETで事前にとあるリソースを取得する仕様だったためGETメ ソッドでリソースが削除されてしまった。 原因はソフトウェアではなく、 ①Web上にGETを上記のように誤用するアプリで れていたこと②Google が現実のWebに対応しないツールをリリースしたこと この2点だった。 POST-Redirect-GET、いわゆるPRGパターン https://qiita.com/furi/items/a32c106e9d7c4418fc9d
  44. 44. そんなアプリは作らないよう にしましょう
  45. 45. 御清聴 ありがとうございました
  46. 46. REST原則に則ったWeb API
  47. 47. What is RESTful Web API? 厳格な定義はないが、広義にはHTTPプロトコルを用いてネットワーク 越しに呼び出すアプリケーション間、システム間のインターフェース
  48. 48. API と Web API の違い API Web API 比 較 表 Application Programming Interface Web API 概要 機能を使う窓口 OS・ミドルウェア・アプリが その他のプログラムから 自分の機能を呼び出すために 提供する窓口(のようなもの) インターネット 経由のAPI どこ から 同じPC内、もしくは LANなどの閉じた ネットワーク経由 インターネット 経由 使用 技術 C#、C++、VB などの開発言語 RPC Net Frame など SOAP、REST など
  49. 49. API と Web API の違い ※日経クロステックより引用
  50. 50. ★メリット アプリケーションの中のリソースがURIで示せる。  アドレス欄に入力すれば、そのリソースを参照できる。  ★どのリソースを操作しようとしているかがわかる。 URIに規則が生まれることで、利用する開発者が楽になる。  ★将来想定されるシステム規模の増大に対応可能な設計である。 ステートレスにすることで、スケーラビリティが向上。  ★アクセスの集中に耐えやすい構造にできる。 統合の相対的な容易さ  ★標準的なデータフォーマット(XMLやJSON)を扱うことで、   他システムとの連携が容易になる。  ★RESTに基づいたWebアプリでは、インタフェースが固定されている為   互換性の問題が発生しない。 標準的なAPIの提供  RESTfulAPIを公開することで、  標準的なデータフォーマットを使い、多様なアプリケーションを提供することができる。 ★デメリット ・RESTの制約  ★プログラミング言語はリソース指向ではないので、URIとマッピングするコードは汚くなりがち  REST APIをハイパーテキスト駆動にするのは比較的難しい。 RESTful Web APIとは

×