SlideShare uma empresa Scribd logo
1 de 39
JSON based
   Web Service
Toru Yamaguchi <zigorou@cpan.org>
JSON Pointer
JSON Pointer とは

• XML で言う所の XPath に相当するもの
• Spec
 • http://tools.ietf.org/html/draft-ietf-
    appsawg-json-pointer-04
JSON Pointer の ABNF

json-pointer = *( "/" reference-token )
reference-token = *( unescaped / escaped )
unescaped = %x00-2E / %x30-7D / %x7F-10FFFF
escaped = "~" ( "0" / "1" )
JSON Pointer と Object
                        Access
         JSON Pointer                Object Access
                           obj
/                          obj[""]
/foo                       obj["foo"]
/0                         obj[0]
/foo/2                     obj["foo"][2]
/0/bar                     obj[0]["bar"]
Example (1)
JSON Document                JSON Pointer
{
    "foo": ["bar", "baz"],
     "": 0,
     "a/b": 1,
     "c%d": 2,
     "e^f": 3,
     "g|h": 4,
     "ij": 5,
     "k"l": 6,
     " ": 7,
     "m~n": 8
}
Example (2)
JSON Document                 JSON Pointer
{
    "foo": ["bar", "baz"],
     "": 0,
     "a/b": 1,               // the whole document
     "c%d": 2,               json_pointer(doc, "")
     "e^f": 3,
     "g|h": 4,
     "ij": 5,
     "k"l": 6,
     " ": 7,
     "m~n": 8
}
Example (3)
JSON Document                 JSON Pointer
{
    "foo": ["bar", "baz"],
     "": 0,
     "a/b": 1,               json_pointer(doc, "/foo")
     "c%d": 2,
     "e^f": 3,
     "g|h": 4,
     "ij": 5,
     "k"l": 6,
     " ": 7,
     "m~n": 8
}
Example (4)
JSON Document                 JSON Pointer
{
    "foo": ["bar", "baz"],
     "": 0,
     "a/b": 1,               json_pointer(doc, "/foo/0")
     "c%d": 2,
     "e^f": 3,
     "g|h": 4,
     "ij": 5,
     "k"l": 6,
     " ": 7,
     "m~n": 8
}
Example (5)
JSON Document                 JSON Pointer
{
    "foo": ["bar", "baz"],
     "": 0,
     "a/b": 1,               json_pointer(doc, "/")
     "c%d": 2,
     "e^f": 3,
     "g|h": 4,
     "ij": 5,
     "k"l": 6,
     " ": 7,
     "m~n": 8
}
Example (5)
JSON Document                 JSON Pointer
{
    "foo": ["bar", "baz"],
     "": 0,
     "a/b": 1,               // escaped "/" as "~1"
     "c%d": 2,               json_pointer(doc, "/a~1b")
     "e^f": 3,
     "g|h": 4,
     "ij": 5,
     "k"l": 6,
     " ": 7,
     "m~n": 8
}
Example (6)
JSON Document                 JSON Pointer
{
    "foo": ["bar", "baz"],
     "": 0,
     "a/b": 1,               // slash and one space
     "c%d": 2,               json_pointer(doc, "/ ")
     "e^f": 3,
     "g|h": 4,
     "ij": 5,
     "k"l": 6,
     " ": 7,
     "m~n": 8
}
Example (5)
JSON Document                 JSON Pointer
{
    "foo": ["bar", "baz"],
     "": 0,
     "a/b": 1,               // escaped "~" as "~0"
     "c%d": 2,               json_pointer(doc, "/m~0n")
     "e^f": 3,
     "g|h": 4,
     "ij": 5,
     "k"l": 6,
     " ": 7,
     "m~n": 8
}
Usage of JSON Pointer
•   任意の要素を指し示す事が出来る

    •   WAF 等でも primitive なデータの探索、取
        得に使える (c.f. Mojolicious)

•   URI Fragment Identifier Representation (Section
    6)
    •   JSON Document 中の任意の要素を表す
        URI を提供出来る (とても大事)
JSON Patch
JSON Patch とは
•   Text の差分に対する diff/patch

•   JSON の差分に対する JSON Patch

    •   http://tools.ietf.org/html/draft-ietf-appsawg-json-
        patch-05
    •   差分を表現する JSON Patch document

    •   差分を適用する operation

•   MongoDB の operator にちょっと似ている
JSON Patch Example
[
    { "op": "test", "path": "/a/b/c", "value": "foo" },
    { "op": "remove", "path": "/a/b/c" },
    { "op": "add", "path": "/a/b/c",
      "value": [ "foo", "bar" ] },
    { "op": "replace", "path": "/a/b/c", "value": 42 },
    { "op": "move", "path": "/a/b/c", "to": "/a/b/d" },
    { "op": "copy", "path": "/a/b/c", "to": "/a/b/e" }
]
JSON Patch document
•   全体としては配列

•   配列の各要素に operation を表す object が入る

•   各 operation object には op, path というフィールドがある

    •   op はオペレーション名

    •   path は適用対象を示す JSON Pointer

•   各 operation object には引数のような key-value が指定さ
    れる (value, to)
Operation の適用

• operation object 配列の各要素を先頭か
 ら順番に適用していきます

• 途中で error が発生した場合は処理が終
 了します
Operation - add
JSON Patch Document           •   JSON Pointer で指定され
                                  た path に value で指定
{
                                  された値を追加する
    "op": "add",
    "path": "/a/b/c",
    "value": ["foo", "bar"]   •   path は root か存在する
                                  object または array でな
}
                                  ければならない
Operation - remove
JSON Patch Document    •   JSON Pointer で指定され
                           た target を削除する
{
    "op": "remove",
    "path": "/a/b/c"
                       •   path は存在する物でな
                           ければならない
}
Operation - replace
JSON Patch Document     •   JSON Pointer で指定され
                            た target の値を value で
{
                            指定された物と置き換
    "op": "replace",
                            える
    "path": "/a/b/c",
    "value": 42
}                       •   path は存在する物でな
                            ければならない
Operation - move
JSON Patch Document     •   JSON Pointer で指定された
                            path を to で指定された場所
{                           に移動する
    "op": "move",
    "path": "/a/b/c",       •   path の内容を remove

    "to": "/a/b/d"
                            •   remove された物を add
}
                        •   to が配列の要素を指定して
                            いる場合に幾つか制約があ
                            る
Operation - copy
JSON Patch Document     •   JSON Pointer で指定され
                            た path を to で指定され
{
                            た場所に複製する
    "op": "copy",
    "path": "/a/b/c",
    "to": "/a/b/d"      •   to が配列の要素を指定
                            している場合に幾つか
}
                            制約がある
Operation - test
JSON Patch Document     •   JSON Pointer で指定され
                            た path の値が value で
{
                            指定された物と一致す
    "op": "test",
                            るか確認する
    "path": "/a/b/c",
    "value": "foo"
}                           •   一致しない場合は後
                                続の operation が実行
                                されず、即座にエラー
                                になる
Usage of JSON Patch
• Media Type が "application/json-patch" と
  なっているので RESTful API で PATCH
  メソッドと共に差分適用を表現する

 • See RFC 5789
• JSON 相当で記述された設定のプリプロ
  セッサなど
JSON Schema
JSON Schema とは
•   http://json-schema.org/
•   http://tools.ietf.org/html/draft-zyp-json-schema-03
    •   暫く動きが見えないけど現在 draft-04 策定
        中です

•   JSON Document に対して Validation,
    Documentation, Hyperlink を与える為のスキー
    マ記述形式のこと
Validation &
   Documentation
• だいぶ syntax が多いので詳細は割愛し
 ます:(

 • 詳しくは Spec 見て下さい
• 基本的には primitive な値に対して制約
 をつける事が出来ます
Schema for OAuth 2.0 -
        Authorization Code Grant
{
    "id": "http://schema.example.com/oauth/2.0/authorization_request",
    "title": "OAuth 2.0 Authorization Code Grant Response Object",
    "properties": {
      "code": {
         "title": "The authorization code",
         "type": "string",
         "required": true
      },
      "state": {
         "title": "An opaque value",
         "type": "string",
         "required": false
      }
    }
}
Explain for the schema
•   Authorization Code Grant の Authorization Request の
    クエリパラメータについての Schema になっています

•   title, description で documentation が可能です

•   type で型を指定し、型ごとに指定可能な制約やデ
    フォルト値等が指定出来ます

•   また type は JSON Pointer を使って任意の JSON
    Schema の任意の要素の定義を参照する事が出来ます
Hyperlinks

• JSON Document に Hyperlink を与える為
 の JSON Schema の拡張

• 具体的には Schema に対する relation,
 endpoint, http method, encoding type,
 request property 等を指定出来る
Extending Schema for OAuth
        2.0 Authorization Code Grant
{
    "id": "http://schema.example.com/oauth/2.0/authorization_request",
    "title": "OAuth 2.0 Authorization Code Grant Response Object",
    "properties": { },
    "links": [
       {
          "title": "Authorization endpoint",
          "href": "http://connect.example.com/authorize",
          "rel": "create",
          "enctype": "application/x-www-form-urlencoded"
          "properties": {
            "response_type": {}, "client_id": {},
            "redirect_uri": {}, "scope": {}, "state": {}
          }
       }
    ]
}
Explain to the hyper
          schema
•   https://gist.github.com/3838576 に完全版を書いてみまし
    た

•   Authorization Response を Resource として、この
    Resource を作成する為の Hyperlink を定義しました。

    •   method, enctype, properties で request format も定義
        出来る

•   rel で指定可能な物は大体記述可能なので Service
    Descriptor のような使い方も出来る
Conclusion
JSON Pointer
•   シンプルなのでデータ取得方法として様々
    な所で利用用途がある

    •   JSON Patch で利用されている

•   また JSON Document の内部リンクとして
    も利用価値がある

    •   JSON Schema で利用されている
JSON Patch

• RESTful API で PUT メソッドを利用した
 Partial Update (要は差分適用) の代わり
 に PATCH メソッド + JSON Patch が使
 える

 • ex) OpenSocial Appdata API
JSON Schema
•   Validation として様々な言語から再利用可能

•   Documentation はツールが整備されれば将来性あり

    •   http://sk-api-browser.heroku.com/ などの事例もある

•   Hyperlink まで利用すると API の記述言語としても使
    える

    •   応用すれば Facebook Graph API Explorer のように
        結果に対して適切なリンクを貼る事も可能
Thanks


• Any question?

Mais conteúdo relacionado

Destaque

My Interview with Healthy code Magazine: Future of Android Design
My Interview with Healthy code Magazine: Future of Android DesignMy Interview with Healthy code Magazine: Future of Android Design
My Interview with Healthy code Magazine: Future of Android DesignShyamala Prayaga
 
Enterprise-приложения: Web против Objective C
Enterprise-приложения:  Web против Objective CEnterprise-приложения:  Web против Objective C
Enterprise-приложения: Web против Objective CDiana Dymolazova
 
Besides Objective-C
Besides Objective-CBesides Objective-C
Besides Objective-CJiwei Xu
 
iPhone Development For Experienced Web Developers
iPhone Development For Experienced Web DevelopersiPhone Development For Experienced Web Developers
iPhone Development For Experienced Web Developerslisab517
 
Iphone programming: Objective c
Iphone programming: Objective cIphone programming: Objective c
Iphone programming: Objective cKenny Nguyen
 
Objective-C Crash Course for Web Developers
Objective-C Crash Course for Web DevelopersObjective-C Crash Course for Web Developers
Objective-C Crash Course for Web DevelopersJoris Verbogt
 
باللغة العربية JSON دورة
  باللغة العربية JSON دورة   باللغة العربية JSON دورة
باللغة العربية JSON دورة anees abu-hmaid
 
Canvas دورة باللغة العربية
Canvas دورة باللغة العربيةCanvas دورة باللغة العربية
Canvas دورة باللغة العربيةanees abu-hmaid
 
JSON: The Basics
JSON: The BasicsJSON: The Basics
JSON: The BasicsJeff Fox
 

Destaque (15)

My Interview with Healthy code Magazine: Future of Android Design
My Interview with Healthy code Magazine: Future of Android DesignMy Interview with Healthy code Magazine: Future of Android Design
My Interview with Healthy code Magazine: Future of Android Design
 
Enterprise-приложения: Web против Objective C
Enterprise-приложения:  Web против Objective CEnterprise-приложения:  Web против Objective C
Enterprise-приложения: Web против Objective C
 
Besides Objective-C
Besides Objective-CBesides Objective-C
Besides Objective-C
 
iPhone Development For Experienced Web Developers
iPhone Development For Experienced Web DevelopersiPhone Development For Experienced Web Developers
iPhone Development For Experienced Web Developers
 
HealthyCodeMay2014
HealthyCodeMay2014HealthyCodeMay2014
HealthyCodeMay2014
 
Parte II Objective C
Parte II   Objective CParte II   Objective C
Parte II Objective C
 
Advanced iOS
Advanced iOSAdvanced iOS
Advanced iOS
 
Iphone programming: Objective c
Iphone programming: Objective cIphone programming: Objective c
Iphone programming: Objective c
 
Objective c slide I
Objective c slide IObjective c slide I
Objective c slide I
 
Objective-C Crash Course for Web Developers
Objective-C Crash Course for Web DevelopersObjective-C Crash Course for Web Developers
Objective-C Crash Course for Web Developers
 
Json
JsonJson
Json
 
باللغة العربية JSON دورة
  باللغة العربية JSON دورة   باللغة العربية JSON دورة
باللغة العربية JSON دورة
 
Angular js دورة
Angular js دورةAngular js دورة
Angular js دورة
 
Canvas دورة باللغة العربية
Canvas دورة باللغة العربيةCanvas دورة باللغة العربية
Canvas دورة باللغة العربية
 
JSON: The Basics
JSON: The BasicsJSON: The Basics
JSON: The Basics
 

Semelhante a JSON Based Web Services

AWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
AWS Black Belt Tech シリーズ 2015 - AWS Elastic BeanstalkAWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
AWS Black Belt Tech シリーズ 2015 - AWS Elastic BeanstalkAmazon Web Services Japan
 
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractTakeshi Ogawa
 
10分で作る Node.js Auto Scale 環境 with CloudFormation
10分で作る Node.js Auto Scale 環境 with CloudFormation10分で作る Node.js Auto Scale 環境 with CloudFormation
10分で作る Node.js Auto Scale 環境 with CloudFormationKazuyuki Honda
 
OpenStreetMap+MongoDBで地図情報を検索してみたい!
OpenStreetMap+MongoDBで地図情報を検索してみたい!OpenStreetMap+MongoDBで地図情報を検索してみたい!
OpenStreetMap+MongoDBで地図情報を検索してみたい!Naruhiko Ogasawara
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-Kazunari Hara
 
Couchbase MeetUP Tokyo - #11 Omoidenote
Couchbase MeetUP Tokyo - #11 OmoidenoteCouchbase MeetUP Tokyo - #11 Omoidenote
Couchbase MeetUP Tokyo - #11 Omoidenotekitsugi
 
PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205Toshi Harada
 
再帰的 正規表現JSON Validator
再帰的 正規表現JSON Validator再帰的 正規表現JSON Validator
再帰的 正規表現JSON Validatortakesako
 
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話Masahito Zembutsu
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.0.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.0.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.0.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.0.0対応)fisuda
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5Nishida Kansuke
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.6.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.6.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.6.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.6.0対応)fisuda
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.2.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.2.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.2.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.2.0対応)fisuda
 
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeToshi Harada
 
BDD勉強会 第6回
BDD勉強会 第6回BDD勉強会 第6回
BDD勉強会 第6回zakihaya
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.1.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.1.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.1.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.1.0対応)fisuda
 

Semelhante a JSON Based Web Services (20)

Zabbix API
Zabbix APIZabbix API
Zabbix API
 
AWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
AWS Black Belt Tech シリーズ 2015 - AWS Elastic BeanstalkAWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
AWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
 
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contract
 
10分で作る Node.js Auto Scale 環境 with CloudFormation
10分で作る Node.js Auto Scale 環境 with CloudFormation10分で作る Node.js Auto Scale 環境 with CloudFormation
10分で作る Node.js Auto Scale 環境 with CloudFormation
 
OpenStreetMap+MongoDBで地図情報を検索してみたい!
OpenStreetMap+MongoDBで地図情報を検索してみたい!OpenStreetMap+MongoDBで地図情報を検索してみたい!
OpenStreetMap+MongoDBで地図情報を検索してみたい!
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
 
Couchbase MeetUP Tokyo - #11 Omoidenote
Couchbase MeetUP Tokyo - #11 OmoidenoteCouchbase MeetUP Tokyo - #11 Omoidenote
Couchbase MeetUP Tokyo - #11 Omoidenote
 
PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205
 
再帰的 正規表現JSON Validator
再帰的 正規表現JSON Validator再帰的 正規表現JSON Validator
再帰的 正規表現JSON Validator
 
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.0.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.0.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.0.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.0.0対応)
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5
 
Connect with Data API
Connect with Data APIConnect with Data API
Connect with Data API
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.6.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.6.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.6.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.6.0対応)
 
HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.2.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.2.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.2.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.2.0対応)
 
JSON SchemaとPHP
JSON SchemaとPHPJSON SchemaとPHP
JSON SchemaとPHP
 
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatype
 
BDD勉強会 第6回
BDD勉強会 第6回BDD勉強会 第6回
BDD勉強会 第6回
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.1.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.1.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.1.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.1.0対応)
 

Mais de Toru Yamaguchi

これからの Microservices
これからの Microservicesこれからの Microservices
これからの MicroservicesToru Yamaguchi
 
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015Toru Yamaguchi
 
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015Toru Yamaguchi
 
革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術Toru Yamaguchi
 
技術選択とアーキテクトの役割 (要約版)
技術選択とアーキテクトの役割 (要約版)技術選択とアーキテクトの役割 (要約版)
技術選択とアーキテクトの役割 (要約版)Toru Yamaguchi
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 
How to bake delicious cookie (RESTful Meetup #03)
How to bake delicious cookie (RESTful Meetup #03)How to bake delicious cookie (RESTful Meetup #03)
How to bake delicious cookie (RESTful Meetup #03)Toru Yamaguchi
 
Yapc asia 2011_zigorou
Yapc asia 2011_zigorouYapc asia 2011_zigorou
Yapc asia 2011_zigorouToru Yamaguchi
 
ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platformToru Yamaguchi
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 
mbga Open Platform and Perl
mbga Open Platform and Perlmbga Open Platform and Perl
mbga Open Platform and PerlToru Yamaguchi
 
Inside mbga Open Platform API architecture
Inside mbga Open Platform API architectureInside mbga Open Platform API architecture
Inside mbga Open Platform API architectureToru Yamaguchi
 
Introduction OpenID Authentication 2.0 Revival
Introduction OpenID Authentication 2.0 RevivalIntroduction OpenID Authentication 2.0 Revival
Introduction OpenID Authentication 2.0 RevivalToru Yamaguchi
 
Introduction OpenID Authentication 2.0
Introduction OpenID Authentication 2.0Introduction OpenID Authentication 2.0
Introduction OpenID Authentication 2.0Toru Yamaguchi
 
The Security of OpenID Authentication 2.0
The Security of OpenID Authentication 2.0The Security of OpenID Authentication 2.0
The Security of OpenID Authentication 2.0Toru Yamaguchi
 
Customization of DBIC::Schema::Loader
Customization of DBIC::Schema::LoaderCustomization of DBIC::Schema::Loader
Customization of DBIC::Schema::LoaderToru Yamaguchi
 

Mais de Toru Yamaguchi (20)

これからの Microservices
これからの Microservicesこれからの Microservices
これからの Microservices
 
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
 
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
 
革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術
 
技術選択とアーキテクトの役割 (要約版)
技術選択とアーキテクトの役割 (要約版)技術選択とアーキテクトの役割 (要約版)
技術選択とアーキテクトの役割 (要約版)
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
How to bake delicious cookie (RESTful Meetup #03)
How to bake delicious cookie (RESTful Meetup #03)How to bake delicious cookie (RESTful Meetup #03)
How to bake delicious cookie (RESTful Meetup #03)
 
Yapc asia 2011_zigorou
Yapc asia 2011_zigorouYapc asia 2011_zigorou
Yapc asia 2011_zigorou
 
ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platform
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
mbga Open Platform and Perl
mbga Open Platform and Perlmbga Open Platform and Perl
mbga Open Platform and Perl
 
Inside mbga Open Platform API architecture
Inside mbga Open Platform API architectureInside mbga Open Platform API architecture
Inside mbga Open Platform API architecture
 
Introduction OpenID Authentication 2.0 Revival
Introduction OpenID Authentication 2.0 RevivalIntroduction OpenID Authentication 2.0 Revival
Introduction OpenID Authentication 2.0 Revival
 
OpenID Mobile Profile
OpenID Mobile ProfileOpenID Mobile Profile
OpenID Mobile Profile
 
Introduction OpenID Authentication 2.0
Introduction OpenID Authentication 2.0Introduction OpenID Authentication 2.0
Introduction OpenID Authentication 2.0
 
OpenID 2009
OpenID 2009OpenID 2009
OpenID 2009
 
Mobile Openid
Mobile OpenidMobile Openid
Mobile Openid
 
Client Side Cache
Client Side CacheClient Side Cache
Client Side Cache
 
The Security of OpenID Authentication 2.0
The Security of OpenID Authentication 2.0The Security of OpenID Authentication 2.0
The Security of OpenID Authentication 2.0
 
Customization of DBIC::Schema::Loader
Customization of DBIC::Schema::LoaderCustomization of DBIC::Schema::Loader
Customization of DBIC::Schema::Loader
 

Último

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 

Último (9)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 

JSON Based Web Services

  • 1. JSON based Web Service Toru Yamaguchi <zigorou@cpan.org>
  • 3. JSON Pointer とは • XML で言う所の XPath に相当するもの • Spec • http://tools.ietf.org/html/draft-ietf- appsawg-json-pointer-04
  • 4. JSON Pointer の ABNF json-pointer = *( "/" reference-token ) reference-token = *( unescaped / escaped ) unescaped = %x00-2E / %x30-7D / %x7F-10FFFF escaped = "~" ( "0" / "1" )
  • 5. JSON Pointer と Object Access JSON Pointer Object Access obj / obj[""] /foo obj["foo"] /0 obj[0] /foo/2 obj["foo"][2] /0/bar obj[0]["bar"]
  • 6. Example (1) JSON Document JSON Pointer { "foo": ["bar", "baz"], "": 0, "a/b": 1, "c%d": 2, "e^f": 3, "g|h": 4, "ij": 5, "k"l": 6, " ": 7, "m~n": 8 }
  • 7. Example (2) JSON Document JSON Pointer { "foo": ["bar", "baz"], "": 0, "a/b": 1, // the whole document "c%d": 2, json_pointer(doc, "") "e^f": 3, "g|h": 4, "ij": 5, "k"l": 6, " ": 7, "m~n": 8 }
  • 8. Example (3) JSON Document JSON Pointer { "foo": ["bar", "baz"], "": 0, "a/b": 1, json_pointer(doc, "/foo") "c%d": 2, "e^f": 3, "g|h": 4, "ij": 5, "k"l": 6, " ": 7, "m~n": 8 }
  • 9. Example (4) JSON Document JSON Pointer { "foo": ["bar", "baz"], "": 0, "a/b": 1, json_pointer(doc, "/foo/0") "c%d": 2, "e^f": 3, "g|h": 4, "ij": 5, "k"l": 6, " ": 7, "m~n": 8 }
  • 10. Example (5) JSON Document JSON Pointer { "foo": ["bar", "baz"], "": 0, "a/b": 1, json_pointer(doc, "/") "c%d": 2, "e^f": 3, "g|h": 4, "ij": 5, "k"l": 6, " ": 7, "m~n": 8 }
  • 11. Example (5) JSON Document JSON Pointer { "foo": ["bar", "baz"], "": 0, "a/b": 1, // escaped "/" as "~1" "c%d": 2, json_pointer(doc, "/a~1b") "e^f": 3, "g|h": 4, "ij": 5, "k"l": 6, " ": 7, "m~n": 8 }
  • 12. Example (6) JSON Document JSON Pointer { "foo": ["bar", "baz"], "": 0, "a/b": 1, // slash and one space "c%d": 2, json_pointer(doc, "/ ") "e^f": 3, "g|h": 4, "ij": 5, "k"l": 6, " ": 7, "m~n": 8 }
  • 13. Example (5) JSON Document JSON Pointer { "foo": ["bar", "baz"], "": 0, "a/b": 1, // escaped "~" as "~0" "c%d": 2, json_pointer(doc, "/m~0n") "e^f": 3, "g|h": 4, "ij": 5, "k"l": 6, " ": 7, "m~n": 8 }
  • 14. Usage of JSON Pointer • 任意の要素を指し示す事が出来る • WAF 等でも primitive なデータの探索、取 得に使える (c.f. Mojolicious) • URI Fragment Identifier Representation (Section 6) • JSON Document 中の任意の要素を表す URI を提供出来る (とても大事)
  • 16. JSON Patch とは • Text の差分に対する diff/patch • JSON の差分に対する JSON Patch • http://tools.ietf.org/html/draft-ietf-appsawg-json- patch-05 • 差分を表現する JSON Patch document • 差分を適用する operation • MongoDB の operator にちょっと似ている
  • 17. JSON Patch Example [ { "op": "test", "path": "/a/b/c", "value": "foo" }, { "op": "remove", "path": "/a/b/c" }, { "op": "add", "path": "/a/b/c", "value": [ "foo", "bar" ] }, { "op": "replace", "path": "/a/b/c", "value": 42 }, { "op": "move", "path": "/a/b/c", "to": "/a/b/d" }, { "op": "copy", "path": "/a/b/c", "to": "/a/b/e" } ]
  • 18. JSON Patch document • 全体としては配列 • 配列の各要素に operation を表す object が入る • 各 operation object には op, path というフィールドがある • op はオペレーション名 • path は適用対象を示す JSON Pointer • 各 operation object には引数のような key-value が指定さ れる (value, to)
  • 19. Operation の適用 • operation object 配列の各要素を先頭か ら順番に適用していきます • 途中で error が発生した場合は処理が終 了します
  • 20. Operation - add JSON Patch Document • JSON Pointer で指定され た path に value で指定 { された値を追加する "op": "add", "path": "/a/b/c", "value": ["foo", "bar"] • path は root か存在する object または array でな } ければならない
  • 21. Operation - remove JSON Patch Document • JSON Pointer で指定され た target を削除する { "op": "remove", "path": "/a/b/c" • path は存在する物でな ければならない }
  • 22. Operation - replace JSON Patch Document • JSON Pointer で指定され た target の値を value で { 指定された物と置き換 "op": "replace", える "path": "/a/b/c", "value": 42 } • path は存在する物でな ければならない
  • 23. Operation - move JSON Patch Document • JSON Pointer で指定された path を to で指定された場所 { に移動する "op": "move", "path": "/a/b/c", • path の内容を remove "to": "/a/b/d" • remove された物を add } • to が配列の要素を指定して いる場合に幾つか制約があ る
  • 24. Operation - copy JSON Patch Document • JSON Pointer で指定され た path を to で指定され { た場所に複製する "op": "copy", "path": "/a/b/c", "to": "/a/b/d" • to が配列の要素を指定 している場合に幾つか } 制約がある
  • 25. Operation - test JSON Patch Document • JSON Pointer で指定され た path の値が value で { 指定された物と一致す "op": "test", るか確認する "path": "/a/b/c", "value": "foo" } • 一致しない場合は後 続の operation が実行 されず、即座にエラー になる
  • 26. Usage of JSON Patch • Media Type が "application/json-patch" と なっているので RESTful API で PATCH メソッドと共に差分適用を表現する • See RFC 5789 • JSON 相当で記述された設定のプリプロ セッサなど
  • 28. JSON Schema とは • http://json-schema.org/ • http://tools.ietf.org/html/draft-zyp-json-schema-03 • 暫く動きが見えないけど現在 draft-04 策定 中です • JSON Document に対して Validation, Documentation, Hyperlink を与える為のスキー マ記述形式のこと
  • 29. Validation & Documentation • だいぶ syntax が多いので詳細は割愛し ます:( • 詳しくは Spec 見て下さい • 基本的には primitive な値に対して制約 をつける事が出来ます
  • 30. Schema for OAuth 2.0 - Authorization Code Grant { "id": "http://schema.example.com/oauth/2.0/authorization_request", "title": "OAuth 2.0 Authorization Code Grant Response Object", "properties": { "code": { "title": "The authorization code", "type": "string", "required": true }, "state": { "title": "An opaque value", "type": "string", "required": false } } }
  • 31. Explain for the schema • Authorization Code Grant の Authorization Request の クエリパラメータについての Schema になっています • title, description で documentation が可能です • type で型を指定し、型ごとに指定可能な制約やデ フォルト値等が指定出来ます • また type は JSON Pointer を使って任意の JSON Schema の任意の要素の定義を参照する事が出来ます
  • 32. Hyperlinks • JSON Document に Hyperlink を与える為 の JSON Schema の拡張 • 具体的には Schema に対する relation, endpoint, http method, encoding type, request property 等を指定出来る
  • 33. Extending Schema for OAuth 2.0 Authorization Code Grant { "id": "http://schema.example.com/oauth/2.0/authorization_request", "title": "OAuth 2.0 Authorization Code Grant Response Object", "properties": { }, "links": [ { "title": "Authorization endpoint", "href": "http://connect.example.com/authorize", "rel": "create", "enctype": "application/x-www-form-urlencoded" "properties": { "response_type": {}, "client_id": {}, "redirect_uri": {}, "scope": {}, "state": {} } } ] }
  • 34. Explain to the hyper schema • https://gist.github.com/3838576 に完全版を書いてみまし た • Authorization Response を Resource として、この Resource を作成する為の Hyperlink を定義しました。 • method, enctype, properties で request format も定義 出来る • rel で指定可能な物は大体記述可能なので Service Descriptor のような使い方も出来る
  • 36. JSON Pointer • シンプルなのでデータ取得方法として様々 な所で利用用途がある • JSON Patch で利用されている • また JSON Document の内部リンクとして も利用価値がある • JSON Schema で利用されている
  • 37. JSON Patch • RESTful API で PUT メソッドを利用した Partial Update (要は差分適用) の代わり に PATCH メソッド + JSON Patch が使 える • ex) OpenSocial Appdata API
  • 38. JSON Schema • Validation として様々な言語から再利用可能 • Documentation はツールが整備されれば将来性あり • http://sk-api-browser.heroku.com/ などの事例もある • Hyperlink まで利用すると API の記述言語としても使 える • 応用すれば Facebook Graph API Explorer のように 結果に対して適切なリンクを貼る事も可能

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n