に入門する
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

REST APIに入門する。