SlideShare a Scribd company logo
1 of 46
Download to read offline
に入門する
1
目的
2
の基本知識を身につけて
成長を加速させる
3
※こういう勉強会、インターン主導でやれるようになりたいね
今日の流れ
通信の仕組みについて
とは?
とは?
実践的な設計手法
おまけ
4
について話す前に
5
での通信でやっていること
6
1. 〇〇の記事一覧が
ほしい!
2. 〇〇の記事一覧を
返すね
ウェブサーバー
用語
7
ウェブサーバー
HTTPリクエスト(Request)
HTTPレスポンス(Response)
ブラウザなどのクライアントと サーバーとのや
り取りにおける決まりごと(プロトコル)
8
1. 〇〇の記事一覧
が、ほしい!
2. 〇〇の記事一覧を
返すね
ウェブ
サーバー
HTTP
この全体のやり取りが
リクエストの例
・リクエスト対象( )
・ メソッド
・クライアントの情報
などの内容を持つ
9
10
ウェブ上でのアドレスを指し示す識別子
プロトコル サーバー名 パス
メソッド
で定義されているメソッド。
で示すリソースに対して、何を行うかで利用するメソッドを選定
HTTPメソッド 意味
GET リソースの取得
POST リソースの作成
PUT リソースの更新
DELETE リソースの削除
PATCH リソースの部分更新
11
レスポンスの例
・ステータスコード
・ステータス文字列
・ のバージョン
などの内容を持つ
12
ステータスコード
処理の実行結果を数値で表現
・ 系は成功
・ 系はクライアント系のエラー
・ 系はサーバーサイドのエラー
13
ステータスコード
HTTPステータスコード 意味
200 OK
リクエストに成功し、情報とともにレスポンス
を返す場合
201 CREATED
リクエストに成功し、新しく作成されたリソースを返す
場合
400 BAD REQUEST
定義されてないメソッドを使用した場合や、
リクエストのフォーマットがおかしい。
401 UNAUTHORIzED 認証が必要な場合
403 FORBIDDEN リソースへのアクセスが拒否された場合
404 NOT FOUND リソースが見つからなかった場合
500 INTERNAL
SERVER ERROR
サーバ内部エラーの場合
14
での通信 まとめ
15
GET /articles HTTP/2
HTTP/2 200 OK
ウェブサーバー
HTTP リクエスト
HTTP レスポンス
1
17
とは、他のプログラムから利用するためにソフ
トウェアの機能を共有すること
によって、アプリケーション同士で連携すること
が可能になる。
18
は、 の中でも特に、
で通信することを前提とした 。
例えば、スマホアプリがサーバーとやり取り
するときにも を利用するのが一般的。
の設計手法
最近はほとんどみない
主流
最近、 が開発
19
とは?
20
とは
美しい設計 今から説明します
の原則に従った を と呼ぶ
21
とリクエストを設計する
22
再掲 リクエストの例
・リクエスト対象( )
・ メソッド
・クライアントの情報
などの内容を持つ
23
基本的な の設計
覚えやすく、どんな機能をもつ なのかひと目でわかる
・短くて入力しやすい
・人間が読んで理解できる
・大文字小文字が混在してない
・改造しやすい
・サーバー側のアーキテクチャが反映されてない
24
短くて入力しやすい
BAD
http://api.example.com/service/api/search
GOOD
http://api.example.com/search
25
人間が読んで理解できる
BAD
http://api.example.com/sv/u
http://api.example.com/productos/12345
http://api.example.com/seihin/12345
GOOD
http://api.example.com/products/12345
26
大・小文字が混在していない
BAD
http://api.example.com/Users/12345
http://api.example.com/API/getUserName
GOOD
http://api.example.com/users/12345
27
改造しやすい
BAD
http://api.example.com/items/alpha/1
http://api.example.com/items/beta/10
http://api.example.com/items/gamma/20
GOOD
http://api.example.com/items/12
28
ルールが統一された
BAD
http://api.example.com/friends?id=100
http://api.example.com/friends/100/messages
GOOD
http://api.example/com/friends/100
http://api.example.com/friends/100/messages
29
メソッドを使った設計
・名詞で構成
表現するのはあくまでもリソースでありアクションではない
のパス内に動詞は存在しないのが基本
・取得、作成、削除、修正、したいのかは のメソッドで指定
GET api.example.com/v1/users
GET api.example.com/v1/users/1/messages
POST api.example.com/v1/users
30
をバージョンで管理する
別のエンドポイントを作成する
古い はの残す
市場に出ている古いバージョンのクライアン
トに対応
バージョン管理できる設計にしとくのが大事
31
レスポンスを設計する
32
再掲 レスポンスの例
・ステータスコード
・ステータス文字列
・ のバージョン
などの内容を持つ
33
データ・フォーマット
34
35
36
テキストベースのフォーマット
簡潔で構造化されてる
ほぼすべての言語に が存在
データの内部構造
リソースの抽出
のテーブルをそのまま公開しない
のアクセス回数がなるべく少なく
37
データの内部構造
38
{
friends: [
123123,
32323,
24343,
88482,
//..
]
}
{
friends: [
{
“id”: 123123,
“name”: “Kazushi”,
“job”: “engineer”,
},
{
“id”: 32323,
“name”: “Iwark”,
“job”: “CTO”,
},
//..
]
}
各データのフォーマット
39
スネークケース キャメルケース
性別のデータをどう表すか
日付のデータをどう表すか
などなど
エラーの表現
ステータスコードでエラーを表現する
エラーの詳細をクライアントに返す
40
エラーの詳細
41
// Twitter
{
error: [
{
“message”: “Bad Request”,
“code”: 400
}
]
}
// Github
{
message: “Not Found’,
documentation_url: ‘https://www.developer.git..“
}
おまけ
42
43
最後に
44
アンケート
45
需要があれば
中級編
かっこいい コマンド
データベース 入門
関数型プログラミング 入門
なんでも
46

More Related Content

What's hot

ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装infinite_loop
 
GitOpsでKubernetesのManifest管理
GitOpsでKubernetesのManifest管理GitOpsでKubernetesのManifest管理
GitOpsでKubernetesのManifest管理Shinya Sasaki
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門増田 亨
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめpospome
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやyoku0825
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
コア・コンテキスト管理 - FIWARE WednesdayWebinars
コア・コンテキスト管理 - FIWARE WednesdayWebinarsコア・コンテキスト管理 - FIWARE WednesdayWebinars
コア・コンテキスト管理 - FIWARE WednesdayWebinarsfisuda
 
浸透するサーバーレス 実際に見るユースケースと実装パターン
浸透するサーバーレス 実際に見るユースケースと実装パターン浸透するサーバーレス 実際に見るユースケースと実装パターン
浸透するサーバーレス 実際に見るユースケースと実装パターンAmazon Web Services Japan
 
Azure API Management 俺的マニュアル
Azure API Management 俺的マニュアルAzure API Management 俺的マニュアル
Azure API Management 俺的マニュアル貴志 上坂
 
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...Insight Technology, Inc.
 
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソースEnpel
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来についてshinjiigarashi
 
Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説貴仁 大和屋
 
OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法Hiroki Mizuno
 
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けRecruit Technologies
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
PHPでマルチスレッド
PHPでマルチスレッドPHPでマルチスレッド
PHPでマルチスレッドkarky7
 
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったことPHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったことgree_tech
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話Takuto Wada
 
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計Hironori Washizaki
 

What's hot (20)

ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
GitOpsでKubernetesのManifest管理
GitOpsでKubernetesのManifest管理GitOpsでKubernetesのManifest管理
GitOpsでKubernetesのManifest管理
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれや
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
コア・コンテキスト管理 - FIWARE WednesdayWebinars
コア・コンテキスト管理 - FIWARE WednesdayWebinarsコア・コンテキスト管理 - FIWARE WednesdayWebinars
コア・コンテキスト管理 - FIWARE WednesdayWebinars
 
浸透するサーバーレス 実際に見るユースケースと実装パターン
浸透するサーバーレス 実際に見るユースケースと実装パターン浸透するサーバーレス 実際に見るユースケースと実装パターン
浸透するサーバーレス 実際に見るユースケースと実装パターン
 
Azure API Management 俺的マニュアル
Azure API Management 俺的マニュアルAzure API Management 俺的マニュアル
Azure API Management 俺的マニュアル
 
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
 
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
 
Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説
 
OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法
 
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
PHPでマルチスレッド
PHPでマルチスレッドPHPでマルチスレッド
PHPでマルチスレッド
 
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったことPHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
 
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計
 

Similar to REST APIに入門する。

Restful Web Service Ch2
Restful Web Service Ch2Restful Web Service Ch2
Restful Web Service Ch2kunit
 
WebSocketを学ぼう!
WebSocketを学ぼう!WebSocketを学ぼう!
WebSocketを学ぼう!Katsuki Chousa
 
Lesson01
Lesson01Lesson01
Lesson01MRI
 
45分で理解する webクローリング入門 斉藤之雄
45分で理解する webクローリング入門 斉藤之雄45分で理解する webクローリング入門 斉藤之雄
45分で理解する webクローリング入門 斉藤之雄Yukio Saito
 
Webページが表示されるまで
Webページが表示されるまでWebページが表示されるまで
Webページが表示されるまでMasataka Suzuki
 
HTTP入門
HTTP入門HTTP入門
HTTP入門Sho A
 
Webプログラミング入門
Webプログラミング入門Webプログラミング入門
Webプログラミング入門Tsuyoshi Kiryu
 
Webプログラミング入門
Webプログラミング入門Webプログラミング入門
Webプログラミング入門SI TEAM
 
サーバーの初歩的な話セミナー@大阪20120901
サーバーの初歩的な話セミナー@大阪20120901サーバーの初歩的な話セミナー@大阪20120901
サーバーの初歩的な話セミナー@大阪20120901Masayuki Abe
 
非エンジニアカンファレンス資料の抜粋
非エンジニアカンファレンス資料の抜粋非エンジニアカンファレンス資料の抜粋
非エンジニアカンファレンス資料の抜粋div Inc
 
WTM52 あなたの作ったWEBサイト、生きてますか?
WTM52 あなたの作ったWEBサイト、生きてますか?WTM52 あなたの作ったWEBサイト、生きてますか?
WTM52 あなたの作ったWEBサイト、生きてますか?Masanori Oobayashi
 
20110622 haruyama webso]cket
20110622 haruyama webso]cket20110622 haruyama webso]cket
20110622 haruyama webso]cketMakoto Haruyama
 
Web ブラウザの仕組み
Web ブラウザの仕組みWeb ブラウザの仕組み
Web ブラウザの仕組みlufe
 

Similar to REST APIに入門する。 (20)

Restful Web Service Ch2
Restful Web Service Ch2Restful Web Service Ch2
Restful Web Service Ch2
 
WebSocketを学ぼう!
WebSocketを学ぼう!WebSocketを学ぼう!
WebSocketを学ぼう!
 
Lesson01
Lesson01Lesson01
Lesson01
 
Yahoo!検索のパフォーマンス向上策全て見せます
Yahoo!検索のパフォーマンス向上策全て見せますYahoo!検索のパフォーマンス向上策全て見せます
Yahoo!検索のパフォーマンス向上策全て見せます
 
45分で理解する webクローリング入門 斉藤之雄
45分で理解する webクローリング入門 斉藤之雄45分で理解する webクローリング入門 斉藤之雄
45分で理解する webクローリング入門 斉藤之雄
 
[BurpSuiteJapan]HTTP基礎入門
[BurpSuiteJapan]HTTP基礎入門[BurpSuiteJapan]HTTP基礎入門
[BurpSuiteJapan]HTTP基礎入門
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
Webページが表示されるまで
Webページが表示されるまでWebページが表示されるまで
Webページが表示されるまで
 
HTTP入門
HTTP入門HTTP入門
HTTP入門
 
Webプログラミング入門
Webプログラミング入門Webプログラミング入門
Webプログラミング入門
 
Webプログラミング入門
Webプログラミング入門Webプログラミング入門
Webプログラミング入門
 
サーバーの初歩的な話セミナー@大阪20120901
サーバーの初歩的な話セミナー@大阪20120901サーバーの初歩的な話セミナー@大阪20120901
サーバーの初歩的な話セミナー@大阪20120901
 
20050809
2005080920050809
20050809
 
非エンジニアカンファレンス資料の抜粋
非エンジニアカンファレンス資料の抜粋非エンジニアカンファレンス資料の抜粋
非エンジニアカンファレンス資料の抜粋
 
Sales chat
Sales chatSales chat
Sales chat
 
HTTP入門
HTTP入門HTTP入門
HTTP入門
 
Rest ful api設計入門
Rest ful api設計入門Rest ful api設計入門
Rest ful api設計入門
 
WTM52 あなたの作ったWEBサイト、生きてますか?
WTM52 あなたの作ったWEBサイト、生きてますか?WTM52 あなたの作ったWEBサイト、生きてますか?
WTM52 あなたの作ったWEBサイト、生きてますか?
 
20110622 haruyama webso]cket
20110622 haruyama webso]cket20110622 haruyama webso]cket
20110622 haruyama webso]cket
 
Web ブラウザの仕組み
Web ブラウザの仕組みWeb ブラウザの仕組み
Web ブラウザの仕組み
 

REST APIに入門する。