cakephp3で学ぶapiマネジメント #phpconfuk

34
CakePHP3 ででで API でででででで 2016/05/21 PHP ででででででででで でで でで

Upload: yuta-matsumura

Post on 09-Feb-2017

2.017 views

Category:

Technology


0 download

TRANSCRIPT

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

CakePHP3 で学ぶAPI マネジメント

2016/05/21 PHP カンファレンス福岡

松村 優大

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

自己紹介

•松村 優大( MLB お兄さん)

•島根出身の 28 歳

•株式会社オルターブース

•テクニカルアーキテクト

2

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

会社紹介

福岡発フルスタックサービス開発

つまらない世界からお客様を解放させ、もっと刺激のある世界へ変化させよう!

3

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

よく使う Web フレームワーク

4

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

5

ControllerMode

l View

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

6

• データ(≒テーブル)の管理• ビジネスロジックModel

• ユーザインターフェースを表現• Controller からデータが渡るView

• Model から View へ出力データを渡す

• View から Model へ入力データ渡す

Controller

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

View はツラいです・・・

•デバッグが難しい、または出来ない• 実行時エラー(=例外)が発生して初めて

バグに気付く

• Controller から View へのデータ連携がネック• CakePHP ... viewVars• ASP.NET ... ViewBag, ViewData

7

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

8

コ「 userName という変数に氏名を設定しといたからな!」

ビ「 userName という変数にある氏名を表示するで!」

コ「氏名を設定する変数を staffName に変更したで!」

修正

ビ「 userName って変数が無くなっとるやんけ!」⇒例外

密結合

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

9

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

10

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

11

実装済みの機能に修正を加える場合もあるし、製造時と修正時の担当者が異なる場合も多々ある。

データの受渡し方にルールを設けるべきだという考えも分かるが、そもそもこのようなデータの受渡し方を行うことにリスクがあるのではないか。

もっと品質を高められる仕組みはないか。テツヤシタクナイ。

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

12

Controller

ModelHTML

JavaScript

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

13

View を使わず

データはAPI で提供

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

2015 年 10 月~

API ぽいものAPI 設計の基礎不足を痛感

ダサいエンドポイント/api/getUserName とか…。

v3.0

14

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

2016 年 01 月~

猛勉強ターン

15

v3.1

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

2016年 03月~

RESTAPI & SPA

APIデザインを勉強し、規模の大きな開発で実践中

16

v3.2

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

API の品質を高める仕組み

1. 開発者 / 利用者にとって易しい API 設計

2. フレームワーク機能の適切な利用

3. プルリクエストによるコードレビュー

4. エンドポイント単位の単体テスト

17

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

設計:リクエスト

•HTTP メソッド

•認証方式

•パラメータ• GET : クエリパラメータ• POST/PUT : JSON• 型、必須かどうかも明記

18

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

設計:レスポンス

•正常系レスポンス項目• GET : ページング情報も付加• JSON レスポンスの例を明記

•異常系レスポンス項目• エラー情報とステータスコードを明記• JSON レスポンスの例を明記

19

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

設計:詳細設計

• API 内部での処理を記載

•リクエスト情報、レスポンス情報では伝わりにくい部分を明記

20

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

設計:単体テスト

• API 設計時にテストケースも考える

•リクエストパラメータのパターンテスト• 取得件数やソートに関するパターンが

意外と漏れる

•単体テストは PHPUnit を使用• ステータスコードのチェック• レスポンス JSON の想定と実際の比較

21

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

22

Input/Output を明確にする

API の挙動のイメージが容易

フロントエンドでAPI が利用しやすくなる

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

23

本編では弊社の

API 設計書フォーマット

をお見せしました

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

CakePHP3 を採用したワケ

• CakePHP2 での開発経験 #NOT 実務レベル

•こだわりはほとんど無い• MVC フレームワークであること• O/R マッパー機能をもつこと

•せっかくだから最新の CakePHP3 を採用

24

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

25

バージョンが一つあがっただけっしょwww

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

26

バージョンが一つあがっただけっしょwww

Entity Table

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

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

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

CakePHP3 で API を作る手順

1. ルーティングの設定

2. ビューの準備

3. CRUD メソッドの定義

http://book.cakephp.org/3.0/ja/development/rest.html

28

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

1. ルーティングのスコープ切り分け※よくみる /api/ のあれ

2. 拡張子の指定 ( json, xml, etc )3. REST アクセスしたいリソースを指定※リソース= Model

http://book.cakephp.org/3.0/ja/development/routing.html#restful

ルーティングの設定

29

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

ビューの準備

1. JSON形式のレスポンスにはCake\View\JsonView が使用される

2. JsonView のマルチバイト対応

3. AppController->beforeRender にてマルチバイト対応 JsonView を適用

http://blog.doizaki.com/entry/2015/05/19/050106

30

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

$ curl http://localhost/api/users.json

{ "users": [ { "id": 1, "name": "\u3086\u3046\u305f" } ]} 31

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

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)

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

課題

•認証

•HTTPヘッダの適切利用

• REST のネスト構成• /company/:id/employee/:id みたい

• CakePHP プラグイン

33

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

ありがとうございました。