SlideShare a Scribd company logo
1 of 54
Download to read offline
RESTful
Web
Application
by
Laravel
LT会 in php勉強会
@yoshitaro_yoyo
1. 今日の目標
2. REST
3. LaravelとRESTful
4. HTTPメソッド
5. 安全性と冪等性
6. 小ネタ
今日のアジェンダ
1.今日の目標
2. REST
3. LaravelとRESTful
4. HTTPメソッド
5. 安全性と冪等性
6. 小ネタ
今日のアジェンダ
•Laravel で RESTful な Web アプリ を作れる
•各 HTTP メソッドの使い分け
•安全性と冪等性、そしてその重要性
1.今日の目標
1. 今日の目標
2.REST
3. LaravelとRESTful
4. HTTPメソッド
5. 安全性と冪等性
6. 小ネタ
今日のアジェンダ
RESTful な Web アプリとは
2. REST
REST原則に則ったWeb アプリ
What is REST?
1.アドレス可能性	
最も重要。URIを通じ、リソースを端的に指し示すことができる性質。すべての情報が一意なURIで表現さ
れるようにすること。これが無いと接続性と統一インターフェースは実現できません
2.接続性
あるリソースに「別のリソースへのリンク」を含めることができ、リンクを含めることで「別のリソースに
接続すること」ができること。
3.統一インターフェース
リソースの取得、作成、更新、削除といった操作は、すべてHTTPメソッドを利用すること。この場合の得
「GET」「POST」「PUT」、削除「DELETE」上記2つの性質が保証されて初めて価値の出る性質
4.ステートレス性
すべてのHTTPリクエストが完全に分離している性質であり、セッションなどの状態管理は行われないこ
と。実際はそこまで重要ではない。WebサービスではCookieによるセッション管理が必須だから
RESTの4原則
•REpresentational State Transferの略
•Representation は 表現
•State = 状態
•Transfer = 転送
•表現とは、Webサーバの送信するResourcesの形式
•Resourcesとは、Web上に存在する情報、データのこと
REST
•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って何??
•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って何??
1. 今日の目標
2. REST
3.Laravelと
RESTful
4. HTTPメソッド
5. 安全性と冪等性
6. 小ネタ
今日のアジェンダ
• Routing
特定アドレスが特定HTTPメソッドでリク
エストされた際、指定したコントローラの
指定したメソッドを呼び出すという仕組み
3. LaravelとRESTful な Web アプリ
REST Controller と Routing
REST ではない Web アプリ
RESTful な Web アプリ
RESTful な Web アプリ
RESTful な Web アプリ
1. 今日の目標
2. REST
3. LaravelとRESTful
4.HTTP  
メソッド
5. 安全性と冪等性
6. 小ネタ
今日のアジェンダ
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
ん?
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
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
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
やってること一緒?
PUT メソッドと POST メソッドの違い
POST PUT
リソースの
作成
⭕ ⭕
リソースの
URI指定
❌ ⭕
URIの
決定権
サーバ側 クライアント側
サーバとの
結合度
疎 密
向いてる
Webサービス
Twitter Wikipedia
基本的な
使用方法
リソース新規作成 リソース更新
1. 今日の目標
2. REST
3. LaravelとRESTful
4. HTTPメソッド
5.安全性と    
冪等性
6. 小ネタ
今日のアジェンダ
5. 安全性と冪等性
安全性 冪等性
リソースの状態を変化させず
読み取り専用のもの。
リクエストしても単にその時点で
のリソースの表現を取得している
だけ。GETは安全
同じ操作を繰り返しても結果が同じ
↓
「同一パラメーターで 1 回以上リ
クエストしても、リソースの状態が
同じであること」
PUTやDELETEは冪等
クライアントが未知のURIにアク
セスしても害がないことある程度
保証できる
システム堅牢性、情報整合性、ク
ライアントにリクエストのリトラ
イ可否を通知
各HTTPメソッドの対応
安全性 冪等性
GET ⭕ ⭕
POST ❌ ❌
PUT ❌ ⭕
DELETE ❌ ⭕
HEAD ⭕ ⭕
本来の「冪等」の目的
WebServer
WebClient
本来の「冪等」の目的
WebServer
WebClient
リクエスト
本来の「冪等」の目的
WebServer
WebClient
リクエスト
①リクエストし成功
本来の「冪等」の目的
WebServer
WebClient
リクエスト
①リクエストし成功
本来の「冪等」の目的
WebServer
WebClient
リクエスト
❌
①リクエストし成功
本来の「冪等」の目的
WebServer
WebClient
②通信障害により
レスポンスが届かない
リクエスト
❌
①リクエストし成功
本来の「冪等」の目的
WebServer
WebClient
②通信障害により
レスポンスが届かない
リクエスト
❌
リクエストリトライ
①リクエストし成功
本来の「冪等」の目的
WebServer
WebClient
②通信障害により
レスポンスが届かない
リクエスト
❌
リクエストリトライ
③サーバはリトライによる
リソースの不整合から保護
しなくてはいけない
①リクエストし成功
本来の「冪等」の目的
WebServer
WebClient
②通信障害により
レスポンスが届かない
リクエスト
❌
リクエストリトライ
③サーバはリトライによる
リソースの不整合から保護
しなくてはいけない
④リトライによるリソース
の整合性が保証されなくては
むやみにリトライできない
①リクエストし成功
本来の「冪等」の目的
WebServer
WebClient
②通信障害により
レスポンスが届かない
リクエスト
❌
リクエストリトライ
③サーバはリトライによる
リソースの不整合から保護
しなくてはいけない
④リトライによるリソース
の整合性が保証されなくては
むやみにリトライできない
①リクエストし成功
冪等性
本来の「冪等」の目的
WebServer
WebClient
②通信障害により
レスポンスが届かない
リクエスト
❌
リクエストリトライ
③サーバはリトライによる
リソースの不整合から保護
しなくてはいけない
④リトライによるリソース
の整合性が保証されなくては
むやみにリトライできない
①リクエストし成功
冪等性
同じ操作を繰り返しても結果が同じ
同一パラメーターで 1 回以上リクエストしても、
本来の「冪等」の目的
WebServer
WebClient
②通信障害により
レスポンスが届かない
リクエスト
❌
リクエストリトライ
③サーバはリトライによる
リソースの不整合から保護
しなくてはいけない
④リトライによるリソース
の整合性が保証されなくては
むやみにリトライできない
①リクエストし成功
冪等性
同じ操作を繰り返しても結果が同じ
同一パラメーターで 1 回以上リクエストしても、
リソースの状態が
同じであること
1. 今日の目標
2. REST
3. LaravelとRESTful
4. HTTPメソッド
5. 安全性と冪等性
6.小ネタ
今日のアジェンダ
1. HTMLのFORMで指定できるのはGETと
POSTだけ
2. Aタグは基本的にGETしか使えない
3. Validationエラーの戻り値もGETのみ
4. 論理削除はDELETEではなくPUTが適切?
6. 小ネタ
余談、最後に
2005年、Googleがリリースしたとあるツール。
Web上にはデータを削除するサーバ処理をGETメソッドで受け付けていた
ため(GETでDELETE実装した)アプリが多数存在していた。それらがGoogle
のクローラに補足された結果、大量にデータを消されてしまうということが
起きた。GETで事前にとあるリソースを取得する仕様だったためGETメ
ソッドでリソースが削除されてしまった。
原因はソフトウェアではなく、
①Web上にGETを上記のように誤用するアプリで れていたこと②Google
が現実のWebに対応しないツールをリリースしたこと
この2点だった。
POST-Redirect-GET、いわゆるPRGパターン
https://qiita.com/furi/items/a32c106e9d7c4418fc9d
そんなアプリは作らないよう
にしましょう
御清聴
ありがとうございました
REST原則に則ったWeb API
What is RESTful Web API?
厳格な定義はないが、広義にはHTTPプロトコルを用いてネットワーク
越しに呼び出すアプリケーション間、システム間のインターフェース
API と Web API の違い
API
Web	API
比	
較	
表
Application	
Programming	
	Interface
Web	API
概要
機能を使う窓口
OS・ミドルウェア・アプリが
その他のプログラムから
自分の機能を呼び出すために
提供する窓口(のようなもの)
インターネット
経由のAPI
どこ
から
同じPC内、もしくは
LANなどの閉じた
ネットワーク経由
インターネット
経由
使用
技術
C#、C++、VB などの開発言語
RPC
Net Frame など
SOAP、REST
など
API と Web API の違い
※日経クロステックより引用
★メリット
アプリケーションの中のリソースがURIで示せる。
 アドレス欄に入力すれば、そのリソースを参照できる。
 ★どのリソースを操作しようとしているかがわかる。
URIに規則が生まれることで、利用する開発者が楽になる。
 ★将来想定されるシステム規模の増大に対応可能な設計である。
ステートレスにすることで、スケーラビリティが向上。
 ★アクセスの集中に耐えやすい構造にできる。
統合の相対的な容易さ
 ★標準的なデータフォーマット(XMLやJSON)を扱うことで、
  他システムとの連携が容易になる。
 ★RESTに基づいたWebアプリでは、インタフェースが固定されている為
  互換性の問題が発生しない。
標準的なAPIの提供
 RESTfulAPIを公開することで、
 標準的なデータフォーマットを使い、多様なアプリケーションを提供することができる。
★デメリット
・RESTの制約
 ★プログラミング言語はリソース指向ではないので、URIとマッピングするコードは汚くなりがち
 REST APIをハイパーテキスト駆動にするのは比較的難しい。
RESTful Web APIとは

More Related Content

More from yoshitaro yoyo

A brief overview of recent learnings.pdf
A brief overview of recent learnings.pdfA brief overview of recent learnings.pdf
A brief overview of recent learnings.pdfyoshitaro yoyo
 
Introduction to Design Patterns_and_Object_Orientation.pdf
Introduction to Design Patterns_and_Object_Orientation.pdfIntroduction to Design Patterns_and_Object_Orientation.pdf
Introduction to Design Patterns_and_Object_Orientation.pdfyoshitaro yoyo
 
Recommendation of challenge.pdf
Recommendation of challenge.pdfRecommendation of challenge.pdf
Recommendation of challenge.pdfyoshitaro yoyo
 
Differences between session and cookie and background of their creation
Differences between session and cookie and background of their creationDifferences between session and cookie and background of their creation
Differences between session and cookie and background of their creationyoshitaro yoyo
 
Transaction description how to use it in laravel
Transaction description  how to use it in laravelTransaction description  how to use it in laravel
Transaction description how to use it in laravelyoshitaro yoyo
 
Ymbal expart.php.2ndtermstudent.finalpresentation
Ymbal expart.php.2ndtermstudent.finalpresentationYmbal expart.php.2ndtermstudent.finalpresentation
Ymbal expart.php.2ndtermstudent.finalpresentationyoshitaro yoyo
 

More from yoshitaro yoyo (6)

A brief overview of recent learnings.pdf
A brief overview of recent learnings.pdfA brief overview of recent learnings.pdf
A brief overview of recent learnings.pdf
 
Introduction to Design Patterns_and_Object_Orientation.pdf
Introduction to Design Patterns_and_Object_Orientation.pdfIntroduction to Design Patterns_and_Object_Orientation.pdf
Introduction to Design Patterns_and_Object_Orientation.pdf
 
Recommendation of challenge.pdf
Recommendation of challenge.pdfRecommendation of challenge.pdf
Recommendation of challenge.pdf
 
Differences between session and cookie and background of their creation
Differences between session and cookie and background of their creationDifferences between session and cookie and background of their creation
Differences between session and cookie and background of their creation
 
Transaction description how to use it in laravel
Transaction description  how to use it in laravelTransaction description  how to use it in laravel
Transaction description how to use it in laravel
 
Ymbal expart.php.2ndtermstudent.finalpresentation
Ymbal expart.php.2ndtermstudent.finalpresentationYmbal expart.php.2ndtermstudent.finalpresentation
Ymbal expart.php.2ndtermstudent.finalpresentation
 

RESTful Web Application by Laravel