SlideShare a Scribd company logo
1 of 16
Download to read offline
RESTful API
⼊入⾨門
@Keisuke69
⾃自⼰己紹介
{
"Name"  :  "⻄西⾕谷圭介",
"Twitter"  :  "@Keisuke69",
"Profile"  :  {
”Company"  :  “Amazon  Web  Services  Japan",
“Role”  :  “Solutions  Architect”,
“Others”  :  [
“よく⾚赤いドクロの⼈人と⾔言われます”,
“好きな⾔言語は特にないけどRubyをよく使います”,
“フジロッカーです。サマソニよりフジロック派。  
              でもサマソニも毎年年⾏行行きます”,
“マンガ⼤大好き”
]
}
}
そもそもRESTって?
RESTとは
• Representational  State  Transfer
• Roy  Fieldingが提唱したWebのソフトウェア
アーキテクチャの1つ
• RESTの原則に則ったAPIをRESTful APIという
RESTの特徴
• リソース指向
• URIによるリソースの識識別
• ステートレス
• HTTPメソッドを利利⽤用した操作
リソース指向
• リソースとは名前を持つあらゆる情報のこと
– 東京の天気
– 今⽇日のニュース
– Amazonの株価
• 全てのリソースはURIで表現する
– URIがリソースそのものを⽰示す
– URIとは1対1の関係
• 時間、条件によって「状態」は変わり得るが、その
「意味」は変わることはない
URI
• Uniform  Resource  Identifier
• リソースを特定するもの
– 例例)https://api.example.com/resouces/1234
• 名詞で構成
– 表現するのはあくまでもリソースでありアクションではない
– URIのパス内に動詞が存在しないのが基本(名詞のみ)
Photo   credit: The   U.S.  National  Archives via Visual  Hunt / No   known   copyright  restrictions
ステートレス
• クライアントとサーバ間の接続に状態を持たな
い
• (理理想は)リクエストの1つ1つにそれを処理理す
るにあたって必要な情報を全て含むこと
• 状態を持たないのでスケーラビリティの確保が
容易易になる
例例:ステートフルなやり取り
いらっしゃいませ。○○バーガーへようこそ
ハンバーガーセットをください
サイドメニューはいかがなさいますか?
ポテトをください
ドリンクはいかがなさいますか?
はい
コーラをお願いします
以上でよろしいですか?
お会計は◯◯円になります
Photo  credit: skpy via Visual   Hunt / CC  BY-­SA
例例:ステートレスなやり取り
いらっしゃいませ。○○バーガーへようこそ
ハンバーガーセットをください
サイドメニューはいかがなさいますか?
ハンバーガーセットをポテトで
お願いします
ドリンクはいかがなさいますか?
ハンバーガーセットをポテトと
コーラでお願いします
ハンバーガーセットをポテトと
コーラでお願いします
以上でよろしいですか?
お会計は◯◯円になります
Photo  credit: skpy via Visual   Hunt / CC  BY-­SA
例例:ステートレスなやり取り
いらっしゃいませ。○○バーガーへようこそ
ハンバーガーセットをください
サイドメニューはいかがなさいますか?
ハンバーガーセットをポテトで
お願いします
ドリンクはいかがなさいますか?
ハンバーガーセットをポテトと
コーラでお願いします
ハンバーガーセットをポテトと
コーラでお願いします
以上でよろしいですか?
お会計は◯◯円になります
Photo  credit: skpy via Visual   Hunt / CC  BY-­SA
⾮非常に冗⻑⾧長だが、
状態を持たないため、  
都度度全てを伝える必要がある  
HTTPメソッド
• URIで⽰示すリソースに対して何を⾏行行うかで利利⽤用するメ
ソッドを選択する
• HTTPで定義されているメソッドを利利⽤用
• GET/POST/PUT/DELETEおよびPATCHを主に利利⽤用する
HTTPメソッド 意味 CRUDとの対応
GET リソースの取得 READ
POST ⼦子リソースの作成 CREATE
PUT リソースの更更新(既存URI)
リソースの作成(新規URI)
UPDATE
CREATE
DELETE リソースの削除 DELETE
PATCH リソースの部分更更新 UPDATE
Photo  credit: Yu.  Samoilov via VisualHunt.com / CC  BY
POST、PUTそしてPATCH
• POSTとPUTはともにリソースの作成が⾏行行える
– リソースの作成には⼀一般的にはPOSTを利利⽤用
– PUT
• クライアントが指定したURIのリソースを作成
• クライアント側でリソース名を作成する
• サーバ側の命名規則等を知っている必要がある(密結合と⾔言える)
• 冪等
– POST
• リソース名はサーバによって作成される
• クライアントが指定するURIはあくまでも親リソース
• サーバによって⼦子リソースのURIが作成される
• PUTとPATCH
– PUTは指定したリソース全体を更更新、PATCHはリソースの⼀一部を更更新
HTTPステータスコード
• 処理理の実⾏行行結果はHTTPステータスコードで表
現
– HTTPステータスコードに意図を込める
• 400系はクライアント系のエラー
– クライアントのリクエストに問題がある場合
– 指定されたリソースが⾒見見つからない、など
• 500系はサーバサイドのエラー
– サーバがリクエストの処理理を失敗した場合
Photo  credit: sanbeiji via VisualHunt / CC  BY-­SA
HTTPステータスコード
HTTPステータスコード 意味 例例
200  OK リクエストに成功し、情報とともにレスポンスを返す場合 GETによるリソース情報の参照
201  CREATED リクエストは成功し、新しく作成されたリソースが返される POSTによるリソース作成
204  NO  CONTENT リクエストに成功したが、レスポンスのエンティティが何も
ない場合
DELETEによる削除
400  BAD  REQUEST リクエスト不不正。クライアントのリクエストがおかしい場合 定義されていないメソッドを使⽤用した
場合やリクエストボディのJSON
フォーマットがおかしい場合
401 UNAUTHORIZED 認証が必要 認証が必要なURLに対して、未認証で
アクセスした場合
403  FORBIDDEN リソースへのアクセスが拒否された アクセス権のないリソースにアクセス
した場合
404  NOT  FOUND リソースが⾒見見つからなかった場合 存在しないリソースへのGET
409  CONFRICT 現在のリソースと競合する場合 作成・更更新しようとしたデータがユ
ニーク制約等でエラーになる場合
500  INTERNAL  
SERVER  ERROR
サーバ内部エラー 処理理中の例例外などサーバ側エラー全般
Thanks

More Related Content

What's hot

Mongo dbを知ろう
Mongo dbを知ろうMongo dbを知ろう
Mongo dbを知ろう
CROOZ, inc.
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
 
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
Takahiro Inoue
 

What's hot (20)

Railsで作るBFFの功罪
Railsで作るBFFの功罪Railsで作るBFFの功罪
Railsで作るBFFの功罪
 
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜	【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
 
これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
Mongo dbを知ろう
Mongo dbを知ろうMongo dbを知ろう
Mongo dbを知ろう
 
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
Microsoft Graph APIを活用した社内アプリケーション開発
Microsoft Graph APIを活用した社内アプリケーション開発Microsoft Graph APIを活用した社内アプリケーション開発
Microsoft Graph APIを活用した社内アプリケーション開発
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見るbacklogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
 
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったことPHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
 
T119_5年間の試行錯誤で進化したMVPVMパターン
T119_5年間の試行錯誤で進化したMVPVMパターンT119_5年間の試行錯誤で進化したMVPVMパターン
T119_5年間の試行錯誤で進化したMVPVMパターン
 
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
 

Similar to RESTful API 入門

Similar to RESTful API 入門 (15)

Api meetup LT
Api meetup LTApi meetup LT
Api meetup LT
 
RestfulなAPIの設計のお話
RestfulなAPIの設計のお話RestfulなAPIの設計のお話
RestfulなAPIの設計のお話
 
PowerShellでFunction Appしよう!
PowerShellでFunction Appしよう!PowerShellでFunction Appしよう!
PowerShellでFunction Appしよう!
 
RESTful Web API Design
RESTful Web API DesignRESTful Web API Design
RESTful Web API Design
 
REST API マスターへの道 - Office 365 パワーユーザー向け
REST API マスターへの道 - Office 365 パワーユーザー向けREST API マスターへの道 - Office 365 パワーユーザー向け
REST API マスターへの道 - Office 365 パワーユーザー向け
 
Spring'17リリースノート輪読会 API By フレクト
Spring'17リリースノート輪読会 API By フレクトSpring'17リリースノート輪読会 API By フレクト
Spring'17リリースノート輪読会 API By フレクト
 
Custom Vision
Custom VisionCustom Vision
Custom Vision
 
Connect with Data API
Connect with Data APIConnect with Data API
Connect with Data API
 
便利なHerokuと active recordの 速度改善tips
便利なHerokuと active recordの 速度改善tips便利なHerokuと active recordの 速度改善tips
便利なHerokuと active recordの 速度改善tips
 
RESTful #とは RailsスタイルからRESTを学ぼう
RESTful #とは RailsスタイルからRESTを学ぼうRESTful #とは RailsスタイルからRESTを学ぼう
RESTful #とは RailsスタイルからRESTを学ぼう
 
2014 08-30 life with roslyn
2014 08-30 life with roslyn2014 08-30 life with roslyn
2014 08-30 life with roslyn
 
Works of site reliability engineer
Works of site reliability engineerWorks of site reliability engineer
Works of site reliability engineer
 
Swiftのクロージャー
SwiftのクロージャーSwiftのクロージャー
Swiftのクロージャー
 
つながるデータShare
つながるデータShareつながるデータShare
つながるデータShare
 
RESTful API (JAX-RS) 書くだけで仕様書も 自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open APIRESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も 自動で作られていく話 with MicroProfile Open API
 

More from Keisuke Nishitani

More from Keisuke Nishitani (20)

Application Lifecycle Management in a Serverless World
Application Lifecycle Management in a Serverless WorldApplication Lifecycle Management in a Serverless World
Application Lifecycle Management in a Serverless World
 
Serverless Anti-Patterns
Serverless Anti-PatternsServerless Anti-Patterns
Serverless Anti-Patterns
 
AWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべことAWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべこと
 
Tune Up AWS Lambda
Tune Up AWS LambdaTune Up AWS Lambda
Tune Up AWS Lambda
 
What's new with Serverless
What's new with ServerlessWhat's new with Serverless
What's new with Serverless
 
Introduction to AWS X-Ray
Introduction to AWS X-RayIntroduction to AWS X-Ray
Introduction to AWS X-Ray
 
Introducing Amazon Rekognition, Amazon Polly and Amazon Lex
Introducing Amazon Rekognition, Amazon Polly and Amazon LexIntroducing Amazon Rekognition, Amazon Polly and Amazon Lex
Introducing Amazon Rekognition, Amazon Polly and Amazon Lex
 
What's new with Serverless
What's new with ServerlessWhat's new with Serverless
What's new with Serverless
 
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or ServerlessRunning Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
 
Serverless Revolution
Serverless RevolutionServerless Revolution
Serverless Revolution
 
AWSのサーバレス関連アップデートを10分で紹介します
AWSのサーバレス関連アップデートを10分で紹介しますAWSのサーバレス関連アップデートを10分で紹介します
AWSのサーバレス関連アップデートを10分で紹介します
 
Introducing Serverless Computing (20160802)
Introducing Serverless Computing (20160802)Introducing Serverless Computing (20160802)
Introducing Serverless Computing (20160802)
 
Going Serverless, Building Applications with No Servers
Going Serverless, Building Applications with No ServersGoing Serverless, Building Applications with No Servers
Going Serverless, Building Applications with No Servers
 
クラウド時代のソフトウェアアーキテクチャ
クラウド時代のソフトウェアアーキテクチャクラウド時代のソフトウェアアーキテクチャ
クラウド時代のソフトウェアアーキテクチャ
 
AWS Lambda Updates
AWS Lambda UpdatesAWS Lambda Updates
AWS Lambda Updates
 
Building Scalable Application on the Cloud
Building Scalable Application on the CloudBuilding Scalable Application on the Cloud
Building Scalable Application on the Cloud
 
AWS Lambda / Amazon API Gateway Deep Dive
AWS Lambda / Amazon API Gateway Deep DiveAWS Lambda / Amazon API Gateway Deep Dive
AWS Lambda / Amazon API Gateway Deep Dive
 
Androidを中心に紐解くIoT
Androidを中心に紐解くIoTAndroidを中心に紐解くIoT
Androidを中心に紐解くIoT
 
AWSで実現するクラウドネイティブなアプリ開発のポイント
AWSで実現するクラウドネイティブなアプリ開発のポイントAWSで実現するクラウドネイティブなアプリ開発のポイント
AWSで実現するクラウドネイティブなアプリ開発のポイント
 
Scale Your Business without Servers
Scale Your Business without ServersScale Your Business without Servers
Scale Your Business without Servers
 

RESTful API 入門