Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
CakePHP3で学ぶ
APIマネジメント
2016/05/21 PHPカンファレンス福岡
松村 優大
自己紹介
• 松村 優大(MLBお兄さん)
• 島根出身の28歳
• 株式会社オルターブース
• テクニカルアーキテクト
2
会社紹介
福岡発
フルスタックサービス開発
つまらない世界からお客様を解放させ、
もっと刺激のある世界へ変化させよう!
3
よく使うWebフレームワーク
4
5
Controller
Model View
6
• データ(≒テーブル)の管理
• ビジネスロジック
Model
• ユーザインターフェースを表現
• Controllerからデータが渡る
View
• ModelからViewへ出力データを渡す
• ViewからModelへ入力データ渡す...
Viewはツラいです・・・
• デバッグが難しい、または出来ない
• 実行時エラー(=例外)が発生して初めて
バグに気付く
• ControllerからViewへのデータ連携が
ネック
• CakePHP ... viewVars
• ASP....
8
コ「userName とい
う変数に氏名を設定
しといたからな!」
ビ「userName とい
う変数にある氏名を
表示するで!」
コ「氏名を設定する
変数を staffName に
変更したで!」
修正
ビ「userName って
変数が...
9
10
11
実装済みの機能に修正を加える場合もあ
るし、製造時と修正時の担当者が異なる場
合も多々ある。
データの受渡し方にルールを設けるべき
だという考えも分かるが、そもそもこのよう
なデータの受渡し方を行うことにリスクがあ
るのではないか。
もっ...
12
Controller
Model
HTML
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を使用
• ステータスコードのチェック
• レスポンスJSO...
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...
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...
ビューの準備
1. JSON形式のレスポンスには
CakeViewJsonView が使用される
2. JsonViewのマルチバイト対応
3. AppController->beforeRender にて
マルチバイト対応JsonViewを適...
$ curl http://localhost/api/users.json
{
"users": [
{
"id": 1,
"name": "u3086u3046u305f"
}
]
}
31
CRUDメソッドの定義
1. スキャフォールドのCRUDメソッドでも
APIとして動作する
2. レスポンスデータを連想配列化
32
HTTPメソッド エンドポイント メソッド
GET /users Index()
GET /users/:id...
課題
• 認証
• HTTPヘッダの適切利用
• RESTのネスト構成
• /company/:id/employee/:id みたいな
• CakePHPプラグイン
33
ありがとうございました。
Upcoming SlideShare
Loading in …5
×

5

Share

Download to read offline

CakePHP3で学ぶAPIマネジメント #phpconfuk

Download to read offline

PHPカンファレンス福岡2016での登壇資料です!

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

CakePHP3で学ぶAPIマネジメント #phpconfuk

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

    Nov. 6, 2018
  • songhohwang

    Dec. 8, 2016
  • shinjihayai

    Jul. 5, 2016
  • IkkiTakahashi

    May. 22, 2016
  • yutanatsume5

    May. 22, 2016

PHPカンファレンス福岡2016での登壇資料です!

Views

Total views

4,616

On Slideshare

0

From embeds

0

Number of embeds

658

Actions

Downloads

7

Shares

0

Comments

0

Likes

5

×