エンジニアのための勉強会 #3
RESTful API
• RESTful APIとかWeb APIとか言われるものが何かを学ぶ回
• どんな風に使うのか、使われているのかを手を動かして体感し
てみる。
• 主に、Web技術を使わない開発をしてる人がターゲット
• RESTの原則を詳しく学ぶ回ではない
はじめに:今回の趣旨
APIとは「Application Programming Interface(アプリケーション・
プログラミング・インターフェイス)」の略語であり、「ある1つの
機能に特化したプログラムで共有可能なもの」や「ソフトウェアの
機能を共有する仕組み」のこと
そもそもAPIとは?
• ネットで調べてみると…
出典:https://www.internetacademy.jp/it/programming/javascript/how-to-use-web-api.html
• まずは、定義よりも具体例でイメージ
• TLのツイートや画像を取得
• 銀行の残高を参照
• Googleマップを表示
• Googleの画像判別
• Uberの配車
よく言われるAPIの例
• ツイートを検索するAPIのデモ
• https://syncer.jp/Web/API/Twitter/REST_API/GET/search/tweets/
• 実際にプログラムから利用するにはDeveloper登録が必要
• この時点では、Web APIについては、URL(URIとも)にアク
セスするとなんか処理される仕組、と理解しておけば良い
とりあえず使ってみる
• REST:設計原則
• 利用者が使いやすいように決められたもの
• REST APIでも同じ意味と考えて良い
• 主にWeb経由で利用するAPI(Web API)で使われる
• RESTful APIとはRESTが適用されたWeb APIのこと
RESTfulとは?
RESTのメリット
• どんな方式で通信したら良い?
• データのフォーマットは?
• URIの名前規則は?
• RESTではない通
信
• RESTfulな通信
• HTTPのGET
• JSON形式(xmlとかもある)
• URIが名詞
?
?
GET
JSO
N
決まった方式で扱いやすい
client server client server
1. セッションなどの状態管理を行わない。(やり取りされる情報はそれ自
体で完結して解釈することができる)
2. 情報を操作する命令の体系が予め定義・共有されている。(HTTPの
GETやPOSTメソッドなど)
3. すべての情報は汎用的な構文で一意に識別される。(URLやURIな
ど)
4. 情報の内部に、別の情報や(その情報の別の)状態へのリンクを含める
ことができる。
RESTの設計原則
出典:https://qiita.com/masato44gm/items/dffb8281536ad321fb08
• GET
• リソースの取得で利用。HPを見るときには、一般にこれを使ってる。
• クエリ文字列パラメータ(URLの末尾に ?id=1001&name=Tom などがつく)
• POST
• リソースの更新などで利用。
• BODYにjson形式のデータを含めて通信。
• RESTでは、PUT / DELETEも使う
RESTの前にHTTP通信を知る
HTTP通信を使ったRESTをイメージ
http://example.com/students
GET: 生徒情報の参照
POST: 生徒情報の登録
DELETE: 生徒情報の削除server
• 単一のURIに対して、HTTPメソッドを変えることで処理内容
が変わる。
• 「students」に対する処理は、同じURIで良い。
• データを表現する記法
• RESTでよく使われる
• Webで一般的に使われる
• keyとvalueがある
• Valueにはintやarrayも利用可
• 昔だとxmlとか使われてた
RESTと合わせてJSONを知る
{
“name”: “Alice” ,
“age”: 27 ,
“gender”: “female” ,
“hobby”: [
“カフェ巡り” ,
“旅行” ,
“ショッピング”
],
“isStudent”: false,
“isTeacher”: true
}
• APIのモックを用意する
• AWS EC2上でcurlのGETとPOSTを試す
• 余裕があれば、AWSに対してインターネット経由でcurlも
ハンズオン
• 設計原則を知る
• ネットにたくさん記事があります
• 色んな企業のAPIを見てみる、使ってみる
• Twitter, github, Google, Uber…
• 自分で作ってみる
• セキュリティも忘れずに(セキュリティトークンの活用)
RESTful APIを作るには
• 過剰な取得
• 取れるデータが決まってるので無駄なデータも取ってしまう
• 通信量が増える
• 過小な取得
• 欲しい情報のために、いくつもURI(エンドポイント)にアクセスすることがある
• エンドポイントが増えていく
• GraphQLの併用へ
RESTの課題
• AWSでサーバレスなAPIを作ってみよう
• Lambda+API Gateway
次回予告
• https://qiita.com/mserizawa/items/b833e407d89abd21ee72
• https://qiita.com/masato44gm/items/dffb8281536ad321fb08
• 初めてのGraphQL
• オライリージャパン
• 最近出たばかり
参考
Fin

エンジニアのための勉強会 #3 『RESTful API』