Slide 1

Slide 1 text

Bear.Sunday と RMパターン

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

アジェンダ - 設計:RMパターン - バリデーション - APIドキュメント

Slide 4

Slide 4 text

設計:RMパターン

Slide 5

Slide 5 text

RMパターン Resource Model Resource リクエストとレスポンスの管理のみ バリデーションやModelの結果によるス テータスコード調整 Model 処理全般

Slide 6

Slide 6 text

Modelって…?

Slide 7

Slide 7 text

Model Repository データ取得関連 Resource <-> Repository <-> DataSource というレイヤー構造 Injector traitでのセッターインジェクション

Slide 8

Slide 8 text

Model Manager その他という感じに… あまり考えずにつけてしまいがちだが、いい名前ではない 直下 Sundayの拡張など Sundayの構成と同様なレイヤー構造をつくるのもあり

Slide 9

Slide 9 text

なぜこういう構成にしたのか

Slide 10

Slide 10 text

全てをResourceにするのは難しい

Slide 11

Slide 11 text

それぞれResourceとして定義できますか? トークのデータを取得する ファイルをアップロードする 音声ファイルを解析する

Slide 12

Slide 12 text

余談 app:// page:// 当時はデフォルトで設定されている、 上記以外にResourceを呼び出す拡張方法がわからなかった………

Slide 13

Slide 13 text

メリット 役割分担が明確で整理,理解しやすい -> 開発速度向上 もしフレームワークを移行してもModel部分は流用可能

Slide 14

Slide 14 text

デメリット ちょっとMode部分が冗長 特にRepositoryが冗長になりやすい Model配下にResourceの機能が使えない

Slide 15

Slide 15 text

改善点 Modelの返り値はオブジェクトにするべきだった 配列も悪くないが、 オブジェクトにすることでの型指定が安心できる

Slide 16

Slide 16 text

バリデーション

Slide 17

Slide 17 text

バリデーション 必要だが、冗長になりやすい 結構な手間がかかる 上手に書かないと、可読率が下がる(気がする)

Slide 18

Slide 18 text

Json-Schemaによるバリデーション Json-Schemaファイル + AOP で完全に”外”に出せる -> 超Happy! ただし あるIDのResourceがユニークであるか, AとBのどちらが必要,両方nullはNGといったことはできない

Slide 19

Slide 19 text

APIドキュメント

Slide 20

Slide 20 text

APIドキュメント Swaggerなどは便利だが、 ドキュメントと実際のコードの整合性を保ち続けるのは大変 Json-Schemaでのバリデーション制約 + BEAR.ApiDoc この2つでいい感じに解決!

Slide 21

Slide 21 text

BEAR.ApiDoc PHPDocとJson-Shcemaを使って APIドキュメントを自動生成してくれる コードを追従することになるので、 引数やバリデーション制約が反映され続ける http://bearsunday.github.io/manuals/1.0/ja/hypermedia-api.html

Slide 22

Slide 22 text

デモ:APIドキュメント

Slide 23

Slide 23 text

まとめ

Slide 24

Slide 24 text

番外編 Xdebug

Slide 25

Slide 25 text

番外編 Deploy

Slide 26

Slide 26 text

番外編 Postman

Slide 27

Slide 27 text

番外編 Cacheは難しい