CakePHP3で学ぶAPIマネジメント #phpconfuk
-
Upload
yuta-matsumura -
Category
Technology
-
view
2.019 -
download
0
Transcript of CakePHP3で学ぶAPIマネジメント #phpconfuk
CakePHP3 で学ぶAPI マネジメント
2016/05/21 PHP カンファレンス福岡
松村 優大
自己紹介
•松村 優大( MLB お兄さん)
•島根出身の 28 歳
•株式会社オルターブース
•テクニカルアーキテクト
2
会社紹介
福岡発フルスタックサービス開発
つまらない世界からお客様を解放させ、もっと刺激のある世界へ変化させよう!
3
よく使う Web フレームワーク
4
5
ControllerMode
l View
6
• データ(≒テーブル)の管理• ビジネスロジックModel
• ユーザインターフェースを表現• Controller からデータが渡るView
• Model から View へ出力データを渡す
• View から Model へ入力データ渡す
Controller
View はツラいです・・・
•デバッグが難しい、または出来ない• 実行時エラー(=例外)が発生して初めて
バグに気付く
• Controller から View へのデータ連携がネック• CakePHP ... viewVars• ASP.NET ... ViewBag, ViewData
7
8
コ「 userName という変数に氏名を設定しといたからな!」
ビ「 userName という変数にある氏名を表示するで!」
コ「氏名を設定する変数を staffName に変更したで!」
修正
ビ「 userName って変数が無くなっとるやんけ!」⇒例外
密結合
9
10
11
実装済みの機能に修正を加える場合もあるし、製造時と修正時の担当者が異なる場合も多々ある。
データの受渡し方にルールを設けるべきだという考えも分かるが、そもそもこのようなデータの受渡し方を行うことにリスクがあるのではないか。
もっと品質を高められる仕組みはないか。テツヤシタクナイ。
12
Controller
ModelHTML
JavaScript
13
View を使わず
データはAPI で提供
2015 年 10 月~
API ぽいものAPI 設計の基礎不足を痛感
ダサいエンドポイント/api/getUserName とか…。
v3.0
14
2016 年 01 月~
猛勉強ターン
15
v3.1
2016年 03月~
RESTAPI & SPA
APIデザインを勉強し、規模の大きな開発で実践中
16
v3.2
API の品質を高める仕組み
1. 開発者 / 利用者にとって易しい API 設計
2. フレームワーク機能の適切な利用
3. プルリクエストによるコードレビュー
4. エンドポイント単位の単体テスト
17
設計:リクエスト
•HTTP メソッド
•認証方式
•パラメータ• GET : クエリパラメータ• POST/PUT : JSON• 型、必須かどうかも明記
18
設計:レスポンス
•正常系レスポンス項目• GET : ページング情報も付加• JSON レスポンスの例を明記
•異常系レスポンス項目• エラー情報とステータスコードを明記• JSON レスポンスの例を明記
19
設計:詳細設計
• API 内部での処理を記載
•リクエスト情報、レスポンス情報では伝わりにくい部分を明記
20
設計:単体テスト
• API 設計時にテストケースも考える
•リクエストパラメータのパターンテスト• 取得件数やソートに関するパターンが
意外と漏れる
•単体テストは PHPUnit を使用• ステータスコードのチェック• レスポンス JSON の想定と実際の比較
21
22
Input/Output を明確にする
API の挙動のイメージが容易
フロントエンドでAPI が利用しやすくなる
23
本編では弊社の
API 設計書フォーマット
をお見せしました
CakePHP3 を採用したワケ
• CakePHP2 での開発経験 #NOT 実務レベル
•こだわりはほとんど無い• MVC フレームワークであること• O/R マッパー機能をもつこと
•せっかくだから最新の CakePHP3 を採用
24
25
バージョンが一つあがっただけっしょwww
26
バージョンが一つあがっただけっしょwww
Entity Table
Model
Entity•レコード
•列=プロパティ
•バリデーション
Table•DB テーブルを操作
• find(er)• TableRegistry
27
http://book.cakephp.org/3.0/ja/orm.htmlhttp://qiita.com/kozo/items/87dc9f725e71dd742468http://qiita.com/morisuke/items/e466d2ab360ab5646e9a
CakePHP3 で API を作る手順
1. ルーティングの設定
2. ビューの準備
3. CRUD メソッドの定義
http://book.cakephp.org/3.0/ja/development/rest.html
28
1. ルーティングのスコープ切り分け※よくみる /api/ のあれ
2. 拡張子の指定 ( json, xml, etc )3. REST アクセスしたいリソースを指定※リソース= Model
http://book.cakephp.org/3.0/ja/development/routing.html#restful
ルーティングの設定
29
ビューの準備
1. JSON形式のレスポンスにはCake\View\JsonView が使用される
2. JsonView のマルチバイト対応
3. AppController->beforeRender にてマルチバイト対応 JsonView を適用
http://blog.doizaki.com/entry/2015/05/19/050106
30
$ curl http://localhost/api/users.json
{ "users": [ { "id": 1, "name": "\u3086\u3046\u305f" } ]} 31
CRUD メソッドの定義
1. スキャフォールドの CRUD メソッドでも API として動作する
2. レスポンスデータを連想配列化
32
HTTPメソッド エンドポイント メソッドGET /users Index()GET /users/:id view($id)POST /users add()PUT /users/:id edit($id)DELETE /users/:id delete($id)
課題
•認証
•HTTPヘッダの適切利用
• REST のネスト構成• /company/:id/employee/:id みたい
な
• CakePHP プラグイン
33
ありがとうございました。