Submit Search
Upload
JSON SchemaとPHP
•
51 likes
•
29,357 views
Hiraku Nakano
Follow
第72回 PHP勉強会@Engine Yard で発表した資料です。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 52
Download now
Download to read offline
Recommended
SpringBootTest入門
SpringBootTest入門
Yahoo!デベロッパーネットワーク
サーバPUSHざっくりまとめ
サーバPUSHざっくりまとめ
Yasuhiro Mawarimichi
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
laravel x モバイルアプリ
laravel x モバイルアプリ
Masaki Oshikawa
FlutterでGraphQLを扱う
FlutterでGraphQLを扱う
IgaHironobu
20160215 04 java ee7徹底入門 jbatch
20160215 04 java ee7徹底入門 jbatch
Jun Inose
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話
Kentaro Yoshida
Recommended
SpringBootTest入門
SpringBootTest入門
Yahoo!デベロッパーネットワーク
サーバPUSHざっくりまとめ
サーバPUSHざっくりまとめ
Yasuhiro Mawarimichi
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
laravel x モバイルアプリ
laravel x モバイルアプリ
Masaki Oshikawa
FlutterでGraphQLを扱う
FlutterでGraphQLを扱う
IgaHironobu
20160215 04 java ee7徹底入門 jbatch
20160215 04 java ee7徹底入門 jbatch
Jun Inose
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話
Kentaro Yoshida
RLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for Django
Takayuki Shimizukawa
俺のTerraform CI/CD ライフサイクル
俺のTerraform CI/CD ライフサイクル
HonMarkHunt
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
安全なID連携のハウツー
安全なID連携のハウツー
Masaru Kurahayashi
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
虎の穴 開発室
Confluenceショートカットキー表 v1
Confluenceショートカットキー表 v1
Naho Inuyama
Guide To AGPL
Guide To AGPL
Mikiya Okuno
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
tamtam180
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
Daichi Koike
C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0
信之 岩永
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
MVC の Model を考える
MVC の Model を考える
tomo_masakura
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
Hitachi, Ltd. OSS Solution Center.
Java8でRDBMS作ったよ
Java8でRDBMS作ったよ
なおき きしだ
JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要
Shumpei Shiraishi
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
JSON Schema で Web API のスキマを埋めよう
JSON Schema で Web API のスキマを埋めよう
VOYAGE GROUP
JSON Schema と API テスト YAPC::Asia Tokyo 2014
JSON Schema と API テスト YAPC::Asia Tokyo 2014
Naoki Shimizu
More Related Content
What's hot
RLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for Django
Takayuki Shimizukawa
俺のTerraform CI/CD ライフサイクル
俺のTerraform CI/CD ライフサイクル
HonMarkHunt
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
安全なID連携のハウツー
安全なID連携のハウツー
Masaru Kurahayashi
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
虎の穴 開発室
Confluenceショートカットキー表 v1
Confluenceショートカットキー表 v1
Naho Inuyama
Guide To AGPL
Guide To AGPL
Mikiya Okuno
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
tamtam180
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
Daichi Koike
C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0
信之 岩永
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
MVC の Model を考える
MVC の Model を考える
tomo_masakura
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
Hitachi, Ltd. OSS Solution Center.
Java8でRDBMS作ったよ
Java8でRDBMS作ったよ
なおき きしだ
JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要
Shumpei Shiraishi
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
What's hot
(20)
RLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for Django
俺のTerraform CI/CD ライフサイクル
俺のTerraform CI/CD ライフサイクル
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
安全なID連携のハウツー
安全なID連携のハウツー
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Confluenceショートカットキー表 v1
Confluenceショートカットキー表 v1
Guide To AGPL
Guide To AGPL
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
MVC の Model を考える
MVC の Model を考える
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
Java8でRDBMS作ったよ
Java8でRDBMS作ったよ
JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Viewers also liked
JSON Schema で Web API のスキマを埋めよう
JSON Schema で Web API のスキマを埋めよう
VOYAGE GROUP
JSON Schema と API テスト YAPC::Asia Tokyo 2014
JSON Schema と API テスト YAPC::Asia Tokyo 2014
Naoki Shimizu
こわくない同時実行制御
こわくない同時実行制御
Hiraku Nakano
STAC2015 講演3 広告システム刷新よもやま話〜テストが当たり前となるまでにやったこと #stac2015
STAC2015 講演3 広告システム刷新よもやま話〜テストが当たり前となるまでにやったこと #stac2015
Yahoo!デベロッパーネットワーク
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
Yoshifumi Kawai
10分でわかる主成分分析(PCA)
10分でわかる主成分分析(PCA)
Takanori Ogata
はじめよう多変量解析~主成分分析編~
はじめよう多変量解析~主成分分析編~
宏喜 佐野
composer-scriptsについて
composer-scriptsについて
Hiraku Nakano
WebAPIのこれまでとこれから
WebAPIのこれまでとこれから
Yohei Yamamoto
Pythonによる機械学習の最前線
Pythonによる機械学習の最前線
Kimikazu Kato
Phpをいじり倒す10の方法
Phpをいじり倒す10の方法
Moriyoshi Koizumi
Viewers also liked
(11)
JSON Schema で Web API のスキマを埋めよう
JSON Schema で Web API のスキマを埋めよう
JSON Schema と API テスト YAPC::Asia Tokyo 2014
JSON Schema と API テスト YAPC::Asia Tokyo 2014
こわくない同時実行制御
こわくない同時実行制御
STAC2015 講演3 広告システム刷新よもやま話〜テストが当たり前となるまでにやったこと #stac2015
STAC2015 講演3 広告システム刷新よもやま話〜テストが当たり前となるまでにやったこと #stac2015
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
10分でわかる主成分分析(PCA)
10分でわかる主成分分析(PCA)
はじめよう多変量解析~主成分分析編~
はじめよう多変量解析~主成分分析編~
composer-scriptsについて
composer-scriptsについて
WebAPIのこれまでとこれから
WebAPIのこれまでとこれから
Pythonによる機械学習の最前線
Pythonによる機械学習の最前線
Phpをいじり倒す10の方法
Phpをいじり倒す10の方法
Similar to JSON SchemaとPHP
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
uedayou
Zabbix API
Zabbix API
Shuhei Hayashibara
Phjosh(仮)プロジェクト
Phjosh(仮)プロジェクト
Moriyoshi Koizumi
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contract
Takeshi Ogawa
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話
Masahito Zembutsu
prmdのドキュメントが読みやすくなる話
prmdのドキュメントが読みやすくなる話
ota42y
Firefox Add-on SDK 入門
Firefox Add-on SDK 入門
Shoot Morii
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
takezoe
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方
Shinsuke Sugaya
JSON Based Web Services
JSON Based Web Services
Toru Yamaguchi
20140903groonga発表資料
20140903groonga発表資料
Hironobu Saitoh
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
Nobukazu Hanada
RとWeb API
RとWeb API
Yohei Sato
Grails 2.0.0.M1の話
Grails 2.0.0.M1の話
Tsuyoshi Yamamoto
Similar to JSON SchemaとPHP
(14)
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
Zabbix API
Zabbix API
Phjosh(仮)プロジェクト
Phjosh(仮)プロジェクト
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contract
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話
prmdのドキュメントが読みやすくなる話
prmdのドキュメントが読みやすくなる話
Firefox Add-on SDK 入門
Firefox Add-on SDK 入門
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方
JSON Based Web Services
JSON Based Web Services
20140903groonga発表資料
20140903groonga発表資料
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
RとWeb API
RとWeb API
Grails 2.0.0.M1の話
Grails 2.0.0.M1の話
More from Hiraku Nakano
composerの遅さをまじめに考える #phpstudy
composerの遅さをまじめに考える #phpstudy
Hiraku Nakano
Composer並列化プラグイン #phpblt
Composer並列化プラグイン #phpblt
Hiraku Nakano
Scrutinizer CIでPHPも静的解析 #phpstudy
Scrutinizer CIでPHPも静的解析 #phpstudy
Hiraku Nakano
PSR-3 Logger Interfaceの紹介
PSR-3 Logger Interfaceの紹介
Hiraku Nakano
pecl-AOPの紹介
pecl-AOPの紹介
Hiraku Nakano
URLで遊ぼう
URLで遊ぼう
Hiraku Nakano
Xml builderの紹介
Xml builderの紹介
Hiraku Nakano
More from Hiraku Nakano
(7)
composerの遅さをまじめに考える #phpstudy
composerの遅さをまじめに考える #phpstudy
Composer並列化プラグイン #phpblt
Composer並列化プラグイン #phpblt
Scrutinizer CIでPHPも静的解析 #phpstudy
Scrutinizer CIでPHPも静的解析 #phpstudy
PSR-3 Logger Interfaceの紹介
PSR-3 Logger Interfaceの紹介
pecl-AOPの紹介
pecl-AOPの紹介
URLで遊ぼう
URLで遊ぼう
Xml builderの紹介
Xml builderの紹介
Recently uploaded
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
Recently uploaded
(8)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
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
5.
6.
JSON Schema • JSONの構造をバリデーションするための仕様 •
http://json-schema.org/ • http://json-schema.org/latest/json-schemacore.html
7.
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()); エラーがあれば 指摘してくれる
14.
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.
...
27.
28.
「JSONの構造を バリデーションし て何が嬉しいの か?」 についてこれから解説します
29.
第二部
30.
PHPと JSON
31.
突然ですが
32.
PHPは JSONで 出来ています
33.
...
34.
って思われそうなので もう少し丁寧に言うと
35.
PHPのデータ構造は JSON互換です
36.
JSONと言えば • boolean, number,
stringなどの基本的な型 • array, object を多段に入れ子にした構造
37.
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相当のデータ構造なら 何でもバリデーションできる 応用範囲の超広い ライブラリなのです
50.
51.
まとめ • PHP=だいたいJSON • ゆえに、JSON
SchemaはPHPのデータ構 造ならだいたい何でもバリデーションでき る • 手持ちのバリデーションライブラリの1つ として、覚えておくといいと思います
52.
$ composer require
justinrainbow/json-schema (依存パッケージもないので割と使いやすいと思う) 完
Download now