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
Submit search
EN
Uploaded by
Hiraku Nakano
PDF, PPTX
29,468 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
John Kim
PDF
졸업작품을 앞둔 게임 기획/프로그래밍 전공 교류회
by
ChangHyun Won
PDF
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
by
shinjiigarashi
PDF
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
by
shinjiigarashi
PPTX
そのアプリ開発PowerAppsでやるか否かの指針?(※個人的見解)
by
Teruchika Yamada
PDF
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
by
gree_tech
PDF
Service Workerとの戦い ~ 実装編 ~ #scripty03
by
Yahoo!デベロッパーネットワーク
PDF
JavaScript GIS ライブラリ turf.js 入門
by
Takahiro Kamada
채팅서버의 부하 분산 사례
by
John Kim
졸업작품을 앞둔 게임 기획/프로그래밍 전공 교류회
by
ChangHyun Won
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
by
shinjiigarashi
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
by
shinjiigarashi
そのアプリ開発PowerAppsでやるか否かの指針?(※個人的見解)
by
Teruchika Yamada
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
by
gree_tech
Service Workerとの戦い ~ 実装編 ~ #scripty03
by
Yahoo!デベロッパーネットワーク
JavaScript GIS ライブラリ turf.js 入門
by
Takahiro Kamada
What's hot
PDF
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
by
Suhyun Park
PPT
마케팅 기획서
by
Chan Hee Lee
PPTX
The Benefits of Using React JS for Web Development!
by
Baharika Sopori
PPTX
T119_5年間の試行錯誤で進化したMVPVMパターン
by
伸男 伊藤
PPTX
Cesiumを動かしてみよう FOSS4G 2016 Tokyo版
by
Kazutaka ishizaki
PPTX
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
by
SEGADevTech
PDF
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
by
Yoshiki Shibukawa
PDF
Reactive extensions入門v0.1
by
一希 大田
PDF
文字コードに起因する脆弱性とその対策(増補版)
by
Hiroshi Tokumaru
PDF
글쓰는 개발자 모임, 글또
by
Seongyun Byeon
PDF
例外設計における大罪
by
Takuto Wada
PDF
SPA時代のOGPとの戦い方
by
Yoichi Toyota
PDF
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
by
Takahito Tejima
PDF
今日からできる!簡単 .NET 高速化 Tips
by
Takaaki Suzuki
PDF
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
by
Unity Technologies Japan K.K.
PDF
GLSLによるシェーダーアートことはじめ
by
Yoichi Hirata
PDF
並行処理初心者のためのAkka入門
by
Yoshimura Soichiro
PDF
基礎からのCode Contracts
by
Yoshifumi Kawai
PPTX
Cesiumマニアックス― Revenge ―
by
Ryousuke Wayama
PDF
goで末尾再帰最適化は使えるか?
by
mori takuma
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
by
Suhyun Park
마케팅 기획서
by
Chan Hee Lee
The Benefits of Using React JS for Web Development!
by
Baharika Sopori
T119_5年間の試行錯誤で進化したMVPVMパターン
by
伸男 伊藤
Cesiumを動かしてみよう FOSS4G 2016 Tokyo版
by
Kazutaka ishizaki
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
by
SEGADevTech
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
by
Yoshiki Shibukawa
Reactive extensions入門v0.1
by
一希 大田
文字コードに起因する脆弱性とその対策(増補版)
by
Hiroshi Tokumaru
글쓰는 개발자 모임, 글또
by
Seongyun Byeon
例外設計における大罪
by
Takuto Wada
SPA時代のOGPとの戦い方
by
Yoichi Toyota
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
by
Takahito Tejima
今日からできる!簡単 .NET 高速化 Tips
by
Takaaki Suzuki
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
by
Unity Technologies Japan K.K.
GLSLによるシェーダーアートことはじめ
by
Yoichi Hirata
並行処理初心者のためのAkka入門
by
Yoshimura Soichiro
基礎からのCode Contracts
by
Yoshifumi Kawai
Cesiumマニアックス― Revenge ―
by
Ryousuke Wayama
goで末尾再帰最適化は使えるか?
by
mori takuma
Viewers also liked
PDF
C#の強み、或いは何故PHPから乗り換えるのか
by
Yoshifumi Kawai
PDF
はじめよう多変量解析~主成分分析編~
by
宏喜 佐野
PDF
10分でわかる主成分分析(PCA)
by
Takanori Ogata
PDF
Phpをいじり倒す10の方法
by
Moriyoshi Koizumi
PDF
WebAPIのこれまでとこれから
by
Yohei Yamamoto
PDF
こわくない同時実行制御
by
Hiraku Nakano
PDF
Pythonによる機械学習の最前線
by
Kimikazu Kato
PDF
JSON Schema で Web API のスキマを埋めよう
by
VOYAGE GROUP
PDF
JSON Schema と API テスト YAPC::Asia Tokyo 2014
by
Naoki Shimizu
PDF
composer-scriptsについて
by
Hiraku Nakano
PDF
STAC2015 講演3 広告システム刷新よもやま話〜テストが当たり前となるまでにやったこと #stac2015
by
Yahoo!デベロッパーネットワーク
C#の強み、或いは何故PHPから乗り換えるのか
by
Yoshifumi Kawai
はじめよう多変量解析~主成分分析編~
by
宏喜 佐野
10分でわかる主成分分析(PCA)
by
Takanori Ogata
Phpをいじり倒す10の方法
by
Moriyoshi Koizumi
WebAPIのこれまでとこれから
by
Yohei Yamamoto
こわくない同時実行制御
by
Hiraku Nakano
Pythonによる機械学習の最前線
by
Kimikazu Kato
JSON Schema で Web API のスキマを埋めよう
by
VOYAGE GROUP
JSON Schema と API テスト YAPC::Asia Tokyo 2014
by
Naoki Shimizu
composer-scriptsについて
by
Hiraku Nakano
STAC2015 講演3 広告システム刷新よもやま話〜テストが当たり前となるまでにやったこと #stac2015
by
Yahoo!デベロッパーネットワーク
More from Hiraku Nakano
PPTX
URLで遊ぼう
by
Hiraku Nakano
PDF
composerの遅さをまじめに考える #phpstudy
by
Hiraku Nakano
PDF
PSR-3 Logger Interfaceの紹介
by
Hiraku Nakano
PPTX
Xml builderの紹介
by
Hiraku Nakano
PDF
Scrutinizer CIでPHPも静的解析 #phpstudy
by
Hiraku Nakano
PPTX
pecl-AOPの紹介
by
Hiraku Nakano
PDF
Composer並列化プラグイン #phpblt
by
Hiraku Nakano
URLで遊ぼう
by
Hiraku Nakano
composerの遅さをまじめに考える #phpstudy
by
Hiraku Nakano
PSR-3 Logger Interfaceの紹介
by
Hiraku Nakano
Xml builderの紹介
by
Hiraku Nakano
Scrutinizer CIでPHPも静的解析 #phpstudy
by
Hiraku Nakano
pecl-AOPの紹介
by
Hiraku Nakano
Composer並列化プラグイン #phpblt
by
Hiraku Nakano
Recently uploaded
PDF
第21回 Gen AI 勉強会「NotebookLMで60ページ超の スライドを作成してみた」
by
嶋 是一 (Yoshikazu SHIMA)
PDF
さくらインターネットの今 法林リージョン:さくらのAIとか GPUとかイベントとか 〜2026年もバク進します!〜
by
法林浩之
PDF
2025→2026宙畑ゆく年くる年レポート_100社を超える企業アンケート総まとめ!!_企業まとめ_1229_3版
by
sorabatake
PDF
Drupal Recipes 解説 .
by
iPride Co., Ltd.
PPTX
ddevについて .
by
iPride Co., Ltd.
PDF
100年後の知財業界-生成AIスライドアドリブプレゼン イーパテントYouTube配信
by
e-Patent Co., Ltd.
PDF
Starlink Direct-to-Cell (D2C) 技術の概要と将来の展望
by
CRI Japan, Inc.
PDF
Reiwa 7 IT Strategist Afternoon I Question-1 Ansoff's Growth Vector
by
akipii ogaoga
PDF
Reiwa 7 IT Strategist Afternoon I Question-1 3C Analysis
by
akipii ogaoga
第21回 Gen AI 勉強会「NotebookLMで60ページ超の スライドを作成してみた」
by
嶋 是一 (Yoshikazu SHIMA)
さくらインターネットの今 法林リージョン:さくらのAIとか GPUとかイベントとか 〜2026年もバク進します!〜
by
法林浩之
2025→2026宙畑ゆく年くる年レポート_100社を超える企業アンケート総まとめ!!_企業まとめ_1229_3版
by
sorabatake
Drupal Recipes 解説 .
by
iPride Co., Ltd.
ddevについて .
by
iPride Co., Ltd.
100年後の知財業界-生成AIスライドアドリブプレゼン イーパテントYouTube配信
by
e-Patent Co., Ltd.
Starlink Direct-to-Cell (D2C) 技術の概要と将来の展望
by
CRI Japan, Inc.
Reiwa 7 IT Strategist Afternoon I Question-1 Ansoff's Growth Vector
by
akipii ogaoga
Reiwa 7 IT Strategist Afternoon I Question-1 3C Analysis
by
akipii ogaoga
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