Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
Hiraku Nakano
PDF, PPTX
29,469 views
JSON SchemaとPHP
第72回 PHP勉強会@Engine Yard で発表した資料です。
Technology
◦
Read more
51
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 52
2
/ 52
3
/ 52
4
/ 52
5
/ 52
6
/ 52
7
/ 52
8
/ 52
9
/ 52
10
/ 52
Most read
11
/ 52
12
/ 52
Most read
13
/ 52
14
/ 52
15
/ 52
16
/ 52
17
/ 52
18
/ 52
19
/ 52
20
/ 52
21
/ 52
22
/ 52
23
/ 52
24
/ 52
25
/ 52
26
/ 52
27
/ 52
28
/ 52
29
/ 52
30
/ 52
31
/ 52
32
/ 52
33
/ 52
34
/ 52
35
/ 52
36
/ 52
37
/ 52
38
/ 52
39
/ 52
40
/ 52
41
/ 52
42
/ 52
43
/ 52
44
/ 52
45
/ 52
46
/ 52
47
/ 52
48
/ 52
49
/ 52
50
/ 52
51
/ 52
52
/ 52
More Related Content
PDF
ドメイン駆動設計入門
by
Takuya Kitamura
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
PDF
オブジェクト指向プログラミングのためのモデリング入門
by
増田 亨
PDF
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
by
Recruit Technologies
PDF
ドメイン駆動設計の正しい歩き方
by
増田 亨
PDF
ドメイン駆動設計 の 実践 Part3 DDD
by
増田 亨
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
by
Takuto Wada
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
ドメイン駆動設計入門
by
Takuya Kitamura
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
オブジェクト指向プログラミングのためのモデリング入門
by
増田 亨
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
by
Recruit Technologies
ドメイン駆動設計の正しい歩き方
by
増田 亨
ドメイン駆動設計 の 実践 Part3 DDD
by
増田 亨
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
by
Takuto Wada
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
What's hot
PDF
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
by
Masahito Zembutsu
PDF
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
by
Yahoo!デベロッパーネットワーク
PDF
Azure Database for PostgreSQL 入門 (PostgreSQL Conference Japan 2021)
by
Keisuke Takahashi
PDF
45分で理解する SQL Serverでできることできないこと
by
Insight Technology, Inc.
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
by
Amazon Web Services Japan
PDF
私がドメイン駆動設計をやる理由
by
増田 亨
PPTX
IncrediBuildでビルド時間を最大90%短縮! - インクレディビルドジャパン株式会社 - GTMF 2018 TOKYO
by
Game Tools & Middleware Forum
PDF
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
by
NTT DATA Technology & Innovation
PDF
Infrastructure as Code (IaC) 談義 2022
by
Amazon Web Services Japan
PDF
ソーシャルゲーム案件におけるDB分割のPHP実装
by
infinite_loop
PDF
マスターデータの キャッシュシステムの改善の話
by
natsumi_ishizaka
PPTX
RLSを用いたマルチテナント実装 for Django
by
Takayuki Shimizukawa
PPTX
Azure仮想マシンと仮想ネットワーク
by
Kuninobu SaSaki
PDF
マルチテナントのアプリケーション実装〜実践編〜
by
Yoshiki Nakagawa
PPTX
イベント・ソーシングを知る
by
Shuhei Fujita
PDF
MySQLで論理削除と正しく付き合う方法
by
yoku0825
PDF
イミュータブルデータモデルの極意
by
Yoshitaka Kawashima
PPTX
SQLチューニング入門 入門編
by
Miki Shimogai
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
コンテナの作り方「Dockerは裏方で何をしているのか?」
by
Masahito Zembutsu
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
by
Yahoo!デベロッパーネットワーク
Azure Database for PostgreSQL 入門 (PostgreSQL Conference Japan 2021)
by
Keisuke Takahashi
45分で理解する SQL Serverでできることできないこと
by
Insight Technology, Inc.
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
by
Amazon Web Services Japan
私がドメイン駆動設計をやる理由
by
増田 亨
IncrediBuildでビルド時間を最大90%短縮! - インクレディビルドジャパン株式会社 - GTMF 2018 TOKYO
by
Game Tools & Middleware Forum
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
by
NTT DATA Technology & Innovation
Infrastructure as Code (IaC) 談義 2022
by
Amazon Web Services Japan
ソーシャルゲーム案件におけるDB分割のPHP実装
by
infinite_loop
マスターデータの キャッシュシステムの改善の話
by
natsumi_ishizaka
RLSを用いたマルチテナント実装 for Django
by
Takayuki Shimizukawa
Azure仮想マシンと仮想ネットワーク
by
Kuninobu SaSaki
マルチテナントのアプリケーション実装〜実践編〜
by
Yoshiki Nakagawa
イベント・ソーシングを知る
by
Shuhei Fujita
MySQLで論理削除と正しく付き合う方法
by
yoku0825
イミュータブルデータモデルの極意
by
Yoshitaka Kawashima
SQLチューニング入門 入門編
by
Miki Shimogai
Viewers also liked
PDF
JSON Schema で Web API のスキマを埋めよう
by
VOYAGE GROUP
PDF
JSON Schema と API テスト YAPC::Asia Tokyo 2014
by
Naoki Shimizu
PDF
こわくない同時実行制御
by
Hiraku Nakano
PDF
STAC2015 講演3 広告システム刷新よもやま話〜テストが当たり前となるまでにやったこと #stac2015
by
Yahoo!デベロッパーネットワーク
PDF
C#の強み、或いは何故PHPから乗り換えるのか
by
Yoshifumi Kawai
PDF
10分でわかる主成分分析(PCA)
by
Takanori Ogata
PDF
はじめよう多変量解析~主成分分析編~
by
宏喜 佐野
PDF
composer-scriptsについて
by
Hiraku Nakano
PDF
WebAPIのこれまでとこれから
by
Yohei Yamamoto
PDF
Pythonによる機械学習の最前線
by
Kimikazu Kato
PDF
Phpをいじり倒す10の方法
by
Moriyoshi Koizumi
JSON Schema で Web API のスキマを埋めよう
by
VOYAGE GROUP
JSON Schema と API テスト YAPC::Asia Tokyo 2014
by
Naoki Shimizu
こわくない同時実行制御
by
Hiraku Nakano
STAC2015 講演3 広告システム刷新よもやま話〜テストが当たり前となるまでにやったこと #stac2015
by
Yahoo!デベロッパーネットワーク
C#の強み、或いは何故PHPから乗り換えるのか
by
Yoshifumi Kawai
10分でわかる主成分分析(PCA)
by
Takanori Ogata
はじめよう多変量解析~主成分分析編~
by
宏喜 佐野
composer-scriptsについて
by
Hiraku Nakano
WebAPIのこれまでとこれから
by
Yohei Yamamoto
Pythonによる機械学習の最前線
by
Kimikazu Kato
Phpをいじり倒す10の方法
by
Moriyoshi Koizumi
More from Hiraku Nakano
PDF
composerの遅さをまじめに考える #phpstudy
by
Hiraku Nakano
PDF
Composer並列化プラグイン #phpblt
by
Hiraku Nakano
PDF
Scrutinizer CIでPHPも静的解析 #phpstudy
by
Hiraku Nakano
PDF
PSR-3 Logger Interfaceの紹介
by
Hiraku Nakano
PPTX
pecl-AOPの紹介
by
Hiraku Nakano
PPTX
URLで遊ぼう
by
Hiraku Nakano
PPTX
Xml builderの紹介
by
Hiraku Nakano
composerの遅さをまじめに考える #phpstudy
by
Hiraku Nakano
Composer並列化プラグイン #phpblt
by
Hiraku Nakano
Scrutinizer CIでPHPも静的解析 #phpstudy
by
Hiraku Nakano
PSR-3 Logger Interfaceの紹介
by
Hiraku Nakano
pecl-AOPの紹介
by
Hiraku Nakano
URLで遊ぼう
by
Hiraku Nakano
Xml builderの紹介
by
Hiraku Nakano
JSON SchemaとPHP
1.
JSON SchemaとPHP 第72回 PHP勉強会@東京
2.
自己紹介 • 中野 拓 •
https://twitter.com/Hiraku • http://blog.tojiru.net/ • PHP歴6年ぐらい • 最近使ってるフレームワークはYafとPhalconです • WebAPI関係のお仕事 • 最近コード書いてない。。
3.
第一部
4.
JSON Schema
6.
JSON Schema • JSONの構造をバリデーションするための仕様 •
http://json-schema.org/ • http://json-schema.org/latest/json-schemacore.html
8.
JSONの例 { “id”: 12345, “name”: “Hiraku
NAKANO”, “tags”: [“PHP”,”JavaScript”] }
9.
JSON Schema { integer “id”: 12345, “name”:
“Hiraku NAKANO”, “tags”: [“PHP”,”JavaScript”] } id, name, tags という プロパティを持った オブジェクト { string string[] “type”:”object”, “properties”: { “id”: {“type”:”integer”}, “name”: {“type”:”string”}, “tags”: { “type”:”array”, “items”:{“type”:”string”} }}}
10.
もし型が違ったら、判定できる { integer “id”: 12345, “name”: “Hiraku
NAKANO”, “tags”: “PHP,JavaScript” } id, name, tags という プロパティを持った オブジェクト { string string[] “type”:”object”, “properties”: { “id”: {“type”:”integer”}, “name”: {“type”:”string”}, “tags”: { “type”:”array”, “items”:{“type”:”string”} }}}
11.
バリデーター実装 バリデーション仕様書 • JSONで記述する • 仕様書を読み取って バリデーションを実行する •
言語ごとに存在 • PHP,JavaScript,Ruby,... JSON Schema
12.
PHPでの実装 • JSON Schema
for PHP がオススメ https://github.com/justinrainbow/json-schema • composerの内部で使われている
13.
<?php require ‘vendor/autoload.php’; $json =
‘{“a”:1, “b”:2}’; $schema = ‘{ “type”:”object”, “properties”:{ “a”: {“type”:”integer”}, “b”: {“type”:”integer”} } }’; $v = new JsonSchema¥Validator; $v->check(json_decode($json), json_decode($schema)); var_dump($v->getErrors()); エラーがあれば 指摘してくれる
15.
超単純な例 JSON スキーマ {} {“type”:”object”} “abc” {“type”:”string”} 123 {“type”:”integer”} [1,2,3] {“type”:”array”}
16.
数値なら上限下限指定できる JSON スキーマ 3 { “type”:”integer”, “minimum”:2, “maximum”:5 }
17.
文字列なら正規表現が使える JSON スキーマ “abcdef” { “type”:”string”, “pattern”:”^a.*f$” }
18.
よく使うパターンはformatで JSON スキーマ “hiraku@tojiru.net” { “type”:”string”, “format”:”email” } date, time, date-time, uri,
host-name, email, ipv6, ip-address, color, style,
19.
型固定の配列 JSON スキーマ [1,2,3] { “type”:”array”, “items”:{ “type”:”integer” } }
20.
配列要素数の制約 JSON スキーマ [1,2,3] { “type”:”array”, “minItems”:1, “maxItems”:5 }
21.
入れ子のオブジェクト JSON { スキーマ { “type”:”object”, “properties”:{ “alice”: ... “bob”: { “type”:”object” } } “alice”:
123, “bob”: { “charlie”: 223 } } } 無限に入れ子可能
22.
未定義のプロパティ拒否 JSON { “alice”: 123, “bob”: 223, “charlie”:
323 } スキーマ { “type”:”object”, “properties”: { “alice”: ... “bob”: ... }, “additionalProperties”: false }
23.
一通りそろってる感じがする • 詳しくはJSON Schema
for PHPのテストを参照! • 入れ子など、構造のバリデーションが得意なのが JSON Schemaの特徴
24.
まとめ • JSON Schemaを使うと、JSONをチェックして、期待通 りの構造になっているか調べることができます。 •
PHPにもJSON Schemaの実装があります。
25.
第一部 完
26.
...
28.
「JSONの構造を バリデーションし て何が嬉しいの か?」 についてこれから解説します
29.
第二部
30.
PHPと JSON
31.
突然ですが
32.
PHPは JSONで 出来ています
33.
...
34.
って思われそうなので もう少し丁寧に言うと
35.
PHPのデータ構造は JSON互換です
36.
JSONと言えば • boolean, number,
stringなどの基本的な型 • array, object を多段に入れ子にした構造
38.
例1 $_GET
39.
?a[]=1&a[]=2&a[]=3&b=hogehoge $_GET === [ ‘a’
=> [‘1’,’2’,’3’], ‘b’ => ‘hogehoge’ ] JSONだよね!
40.
{ } “type”:”object”, “properties”:{ “a”:{ “type”:”array”, “maxItems”:3 }, “b”:{“type”:”string”} }
41.
<?php //... $v = new
JsonSchema¥Validator; $get = json_decode(json_encode($_GET)); $v->check($get, $schema); var_dump($v->getErrors());
42.
普通に$_GETをバリデーションす ると結構面倒くさい <?php if ( isset($_GET[‘a’], $_GET[‘b’])
&& is_array($_GET[‘a’]) && count($_GET[‘a’]) <= 3 && is_string($_GET[‘b’]) ) { //... } もっと入れ子になって いると更に厄介 issetの嵐 これだと何が原因で 駄目だったのか分か らない
43.
例2 関数の引数
44.
<?php /** * @param int
$a * @param string $b * @param array $config */ function hoge($a, $b, array $config) { //... }
45.
<?php function hoge($a, $b,
array $config) { $args = get_defined_vars(); $args === [ ‘a’ => ..., ‘b’ => ..., ‘config’ => ... ]; }
46.
{ } “type”:”object”, “properties”:{ “a”:{“type”:”integer”}, “b”:{“type”:”string”}, “config”:{ “type”:”object”,... } }
47.
以下省略
48.
つまり
49.
JSON Schemaとは、 JSON相当のデータ構造なら 何でもバリデーションできる 応用範囲の超広い ライブラリなのです
51.
まとめ • PHP=だいたいJSON • ゆえに、JSON
SchemaはPHPのデータ構 造ならだいたい何でもバリデーションでき る • 手持ちのバリデーションライブラリの1つ として、覚えておくといいと思います
52.
$ composer require
justinrainbow/json-schema (依存パッケージもないので割と使いやすいと思う) 完
Download