Submit Search
JSON SchemaとPHP
51 likes
29,445 views
Hiraku Nakano
第72回 PHP勉強会@Engine Yard で発表した資料です。
Technology
Read more
1 of 52
Download now
Downloaded 45 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
More Related Content
PDF
Building the Game Server both API and Realtime via c#
Yoshifumi Kawai
ODP
Introduction to Swagger
Knoldus Inc.
PPSX
Introdução a Bootstrap 3
Iago Effting
PPTX
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
JustSystems Corporation
PPTX
What is Angular?
Albiorix Technology
PPTX
Blazor
Ed Charbeneau
PDF
PHPアプリケーションのコンテナ化入門
Amazon Web Services Japan
PDF
JavaScript Execution Context
Juan Medina
Building the Game Server both API and Realtime via c#
Yoshifumi Kawai
Introduction to Swagger
Knoldus Inc.
Introdução a Bootstrap 3
Iago Effting
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
JustSystems Corporation
What is Angular?
Albiorix Technology
Blazor
Ed Charbeneau
PHPアプリケーションのコンテナ化入門
Amazon Web Services Japan
JavaScript Execution Context
Juan Medina
What's hot
(20)
PPTX
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
toshi_pp
PDF
スペシャリストになるには
外道 父
PDF
Cqrs api v2
Brandon Mueller
PPTX
Using or not using magic onion
Goichi Shinohara
PDF
負荷試験入門公開資料 201611
樽八 仲川
PDF
HTML5マークアップの心得と作法
Futomi Hatano
PDF
Introduction to Django REST Framework, an easy way to build REST framework in...
Zhe Li
PDF
Maven基礎
Toshio Takiguchi
PDF
MongoDBのアレをアレする
Akihiro Kuwano
PDF
NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~
NTT DATA OSS Professional Services
PDF
MySQLからPostgreSQLへのマイグレーションのハマリ所
Makoto Kaga
PPTX
TypeScript: Basic Features and Compilation Guide
Nascenia IT
PDF
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
PDF
Jetpack datastore入門
furusin
PDF
Hiveハンズオン
Satoshi Noto
PDF
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Web Services Japan
PPTX
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
Yugo Shimizu
PPTX
Attacking GraphQL
KavishaSheth1
PPTX
GRPC.pptx
Afzal Juneja
PDF
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!デベロッパーネットワーク
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
toshi_pp
スペシャリストになるには
外道 父
Cqrs api v2
Brandon Mueller
Using or not using magic onion
Goichi Shinohara
負荷試験入門公開資料 201611
樽八 仲川
HTML5マークアップの心得と作法
Futomi Hatano
Introduction to Django REST Framework, an easy way to build REST framework in...
Zhe Li
Maven基礎
Toshio Takiguchi
MongoDBのアレをアレする
Akihiro Kuwano
NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~
NTT DATA OSS Professional Services
MySQLからPostgreSQLへのマイグレーションのハマリ所
Makoto Kaga
TypeScript: Basic Features and Compilation Guide
Nascenia IT
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
Jetpack datastore入門
furusin
Hiveハンズオン
Satoshi Noto
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Web Services Japan
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
Yugo Shimizu
Attacking GraphQL
KavishaSheth1
GRPC.pptx
Afzal Juneja
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!デベロッパーネットワーク
Ad
Viewers also liked
(11)
PDF
JSON Schema で Web API のスキマを埋めよう
VOYAGE GROUP
PDF
JSON Schema と API テスト YAPC::Asia Tokyo 2014
Naoki Shimizu
PDF
こわくない同時実行制御
Hiraku Nakano
PDF
STAC2015 講演3 広告システム刷新よもやま話〜テストが当たり前となるまでにやったこと #stac2015
Yahoo!デベロッパーネットワーク
PDF
C#の強み、或いは何故PHPから乗り換えるのか
Yoshifumi Kawai
PDF
10分でわかる主成分分析(PCA)
Takanori Ogata
PDF
はじめよう多変量解析~主成分分析編~
宏喜 佐野
PDF
composer-scriptsについて
Hiraku Nakano
PDF
WebAPIのこれまでとこれから
Yohei Yamamoto
PDF
Pythonによる機械学習の最前線
Kimikazu Kato
PDF
Phpをいじり倒す10の方法
Moriyoshi Koizumi
JSON Schema で Web API のスキマを埋めよう
VOYAGE GROUP
JSON Schema と API テスト YAPC::Asia Tokyo 2014
Naoki Shimizu
こわくない同時実行制御
Hiraku Nakano
STAC2015 講演3 広告システム刷新よもやま話〜テストが当たり前となるまでにやったこと #stac2015
Yahoo!デベロッパーネットワーク
C#の強み、或いは何故PHPから乗り換えるのか
Yoshifumi Kawai
10分でわかる主成分分析(PCA)
Takanori Ogata
はじめよう多変量解析~主成分分析編~
宏喜 佐野
composer-scriptsについて
Hiraku Nakano
WebAPIのこれまでとこれから
Yohei Yamamoto
Pythonによる機械学習の最前線
Kimikazu Kato
Phpをいじり倒す10の方法
Moriyoshi Koizumi
Ad
Similar to JSON SchemaとPHP
(14)
PDF
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
uedayou
PDF
Zabbix API
Shuhei Hayashibara
PDF
Phjosh(仮)プロジェクト
Moriyoshi Koizumi
PPTX
Spring data-rest-and-spring-cloud-contract
Takeshi Ogawa
PDF
ZabbixのAPIを使って運用を楽しくする話
Masahito Zembutsu
PDF
prmdのドキュメントが読みやすくなる話
ota42y
PDF
Firefox Add-on SDK 入門
Shoot Morii
PDF
イマドキの現場で使えるJavaライブラリ事情
takezoe
PDF
Elasticsearchプラグインの作り方
Shinsuke Sugaya
KEY
JSON Based Web Services
Toru Yamaguchi
PPTX
20140903groonga発表資料
Hironobu Saitoh
PDF
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
Nobukazu Hanada
PDF
RとWeb API
Yohei Sato
PDF
Grails 2.0.0.M1の話
Tsuyoshi Yamamoto
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
uedayou
Zabbix API
Shuhei Hayashibara
Phjosh(仮)プロジェクト
Moriyoshi Koizumi
Spring data-rest-and-spring-cloud-contract
Takeshi Ogawa
ZabbixのAPIを使って運用を楽しくする話
Masahito Zembutsu
prmdのドキュメントが読みやすくなる話
ota42y
Firefox Add-on SDK 入門
Shoot Morii
イマドキの現場で使えるJavaライブラリ事情
takezoe
Elasticsearchプラグインの作り方
Shinsuke Sugaya
JSON Based Web Services
Toru Yamaguchi
20140903groonga発表資料
Hironobu Saitoh
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
Nobukazu Hanada
RとWeb API
Yohei Sato
Grails 2.0.0.M1の話
Tsuyoshi Yamamoto
More from Hiraku Nakano
(7)
PDF
composerの遅さをまじめに考える #phpstudy
Hiraku Nakano
PDF
Composer並列化プラグイン #phpblt
Hiraku Nakano
PDF
Scrutinizer CIでPHPも静的解析 #phpstudy
Hiraku Nakano
PDF
PSR-3 Logger Interfaceの紹介
Hiraku Nakano
PPTX
pecl-AOPの紹介
Hiraku Nakano
PPTX
URLで遊ぼう
Hiraku Nakano
PPTX
Xml builderの紹介
Hiraku Nakano
composerの遅さをまじめに考える #phpstudy
Hiraku Nakano
Composer並列化プラグイン #phpblt
Hiraku Nakano
Scrutinizer CIでPHPも静的解析 #phpstudy
Hiraku Nakano
PSR-3 Logger Interfaceの紹介
Hiraku Nakano
pecl-AOPの紹介
Hiraku Nakano
URLで遊ぼう
Hiraku Nakano
Xml builderの紹介
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 スキーマ “
[email protected]
” { “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