狠狠撸

狠狠撸Share a Scribd company logo
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 Identi?er 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?

More Related Content

Viewers also liked (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
Shyamala Prayaga
?
Enterprise-приложения: Web против Objective C
Enterprise-приложения:  Web против Objective CEnterprise-приложения:  Web против Objective C
Enterprise-приложения: Web против Objective C
Diana Dymolazova
?
Besides Objective-C
Besides Objective-CBesides Objective-C
Besides Objective-C
Jiwei Xu
?
iPhone Development For Experienced Web Developers
iPhone Development For Experienced Web DevelopersiPhone Development For Experienced Web Developers
iPhone Development For Experienced Web Developers
lisab517
?
HealthyCodeMay2014
HealthyCodeMay2014HealthyCodeMay2014
HealthyCodeMay2014
Shyamala Prayaga
?
Parte II Objective C
Parte II   Objective CParte II   Objective C
Parte II Objective C
Paolo Quadrani
?
Advanced iOS
Advanced iOSAdvanced iOS
Advanced iOS
Pete Goodliffe
?
Iphone programming: Objective c
Iphone programming: Objective cIphone programming: Objective c
Iphone programming: Objective c
Kenny Nguyen
?
Objective c slide I
Objective c slide IObjective c slide I
Objective c slide I
Diksha Bhargava
?
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
Joris Verbogt
?
Json
JsonJson
Json
Shyamala Prayaga
?
?????? ??????? JSON ????
  ?????? ??????? JSON ????   ?????? ??????? JSON ????
?????? ??????? JSON ????
anees abu-hmaid
?
Angular js ????
Angular js ????Angular js ????
Angular js ????
anees abu-hmaid
?
Canvas ???? ?????? ???????
Canvas ???? ?????? ???????Canvas ???? ?????? ???????
Canvas ???? ?????? ???????
anees abu-hmaid
?
JSON: The Basics
JSON: The BasicsJSON: The Basics
JSON: The Basics
Jeff Fox
?
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
Shyamala Prayaga
?
Enterprise-приложения: Web против Objective C
Enterprise-приложения:  Web против Objective CEnterprise-приложения:  Web против Objective C
Enterprise-приложения: Web против Objective C
Diana Dymolazova
?
Besides Objective-C
Besides Objective-CBesides Objective-C
Besides Objective-C
Jiwei Xu
?
iPhone Development For Experienced Web Developers
iPhone Development For Experienced Web DevelopersiPhone Development For Experienced Web Developers
iPhone Development For Experienced Web Developers
lisab517
?
Iphone programming: Objective c
Iphone programming: Objective cIphone programming: Objective c
Iphone programming: Objective c
Kenny 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 Developers
Joris Verbogt
?
JSON: The Basics
JSON: The BasicsJSON: The Basics
JSON: The Basics
Jeff Fox
?

Similar to JSON Based Web Services (20)

Zabbix API
Zabbix APIZabbix API
Zabbix API
Shuhei Hayashibara
?
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
Amazon 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-contract
Takeshi 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 CloudFormation
Kazuyuki Honda
?
翱辫别苍厂迟谤别别迟惭补辫+惭辞苍驳辞顿叠で地図情报を検索してみたい!
翱辫别苍厂迟谤别别迟惭补辫+惭辞苍驳辞顿叠で地図情报を検索してみたい!翱辫别苍厂迟谤别别迟惭补辫+惭辞苍驳辞顿叠で地図情报を検索してみたい!
翱辫别苍厂迟谤别别迟惭补辫+惭辞苍驳辞顿叠で地図情报を検索してみたい!
Naruhiko Ogasawara
?
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
Kazunari Hara
?
Couchbase MeetUP Tokyo - #11 Omoidenote
Couchbase MeetUP Tokyo - #11 OmoidenoteCouchbase MeetUP Tokyo - #11 Omoidenote
Couchbase MeetUP Tokyo - #11 Omoidenote
kitsugi
?
PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205
Toshi Harada
?
再帰的 正規表現JSON Validator
再帰的 正規表現JSON Validator再帰的 正規表現JSON Validator
再帰的 正規表現JSON Validator
takesako
?
窜补产产颈虫の础笔滨を使って运用を楽しくする话
窜补产产颈虫の础笔滨を使って运用を楽しくする话窜补产产颈虫の础笔滨を使って运用を楽しくする话
窜补产产颈虫の础笔滨を使って运用を楽しくする话
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
?
?箩蚕耻别谤测をおほ?えよう!その5
?箩蚕耻别谤测をおほ?えよう!その5?箩蚕耻别谤测をおほ?えよう!その5
?箩蚕耻别谤测をおほ?えよう!その5
Nishida Kansuke
?
Connect with Data API
Connect with Data APIConnect with Data API
Connect with Data API
Hajime Fujimoto
?
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
?
贬罢惭尝5&补尘辫;础笔滨総まくり
贬罢惭尝5&补尘辫;础笔滨総まくり贬罢惭尝5&补尘辫;础笔滨総まくり
贬罢惭尝5&补尘辫;础笔滨総まくり
Shumpei Shiraishi
?
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
?
JSON SchemaとPHP
JSON SchemaとPHPJSON SchemaとPHP
JSON SchemaとPHP
Hiraku Nakano
?
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Toshi 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
?
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
Amazon 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-contract
Takeshi 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 CloudFormation
Kazuyuki Honda
?
翱辫别苍厂迟谤别别迟惭补辫+惭辞苍驳辞顿叠で地図情报を検索してみたい!
翱辫别苍厂迟谤别别迟惭补辫+惭辞苍驳辞顿叠で地図情报を検索してみたい!翱辫别苍厂迟谤别别迟惭补辫+惭辞苍驳辞顿叠で地図情报を検索してみたい!
翱辫别苍厂迟谤别别迟惭补辫+惭辞苍驳辞顿叠で地図情报を検索してみたい!
Naruhiko Ogasawara
?
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
Kazunari Hara
?
Couchbase MeetUP Tokyo - #11 Omoidenote
Couchbase MeetUP Tokyo - #11 OmoidenoteCouchbase MeetUP Tokyo - #11 Omoidenote
Couchbase MeetUP Tokyo - #11 Omoidenote
kitsugi
?
PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205
Toshi Harada
?
再帰的 正規表現JSON Validator
再帰的 正規表現JSON Validator再帰的 正規表現JSON Validator
再帰的 正規表現JSON Validator
takesako
?
窜补产产颈虫の础笔滨を使って运用を楽しくする话
窜补产产颈虫の础笔滨を使って运用を楽しくする话窜补产产颈虫の础笔滨を使って运用を楽しくする话
窜补产产颈虫の础笔滨を使って运用を楽しくする话
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
?
?箩蚕耻别谤测をおほ?えよう!その5
?箩蚕耻别谤测をおほ?えよう!その5?箩蚕耻别谤测をおほ?えよう!その5
?箩蚕耻别谤测をおほ?えよう!その5
Nishida 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
?
贬罢惭尝5&补尘辫;础笔滨総まくり
贬罢惭尝5&补尘辫;础笔滨総まくり贬罢惭尝5&补尘辫;础笔滨総まくり
贬罢惭尝5&补尘辫;础笔滨総まくり
Shumpei Shiraishi
?
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-datatype
Toshi 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
?

More from Toru Yamaguchi (20)

これからの Microservices
これからの Microservicesこれからの Microservices
これからの Microservices
Toru 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 2015
Toru 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 2015
Toru 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_zigorou
Toru Yamaguchi
?
ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platform
Toru Yamaguchi
?
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
Toru Yamaguchi
?
mbga Open Platform and Perl
mbga Open Platform and Perlmbga Open Platform and Perl
mbga Open Platform and Perl
Toru Yamaguchi
?
Inside mbga Open Platform API architecture
Inside mbga Open Platform API architectureInside mbga Open Platform API architecture
Inside mbga Open Platform API architecture
Toru Yamaguchi
?
Introduction OpenID Authentication 2.0 Revival
Introduction OpenID Authentication 2.0 RevivalIntroduction OpenID Authentication 2.0 Revival
Introduction OpenID Authentication 2.0 Revival
Toru Yamaguchi
?
OpenID Mobile ProfileOpenID Mobile Profile
OpenID Mobile Profile
Toru Yamaguchi
?
Introduction OpenID Authentication 2.0
Introduction OpenID Authentication 2.0Introduction OpenID Authentication 2.0
Introduction OpenID Authentication 2.0
Toru Yamaguchi
?
OpenID 2009
OpenID 2009OpenID 2009
OpenID 2009
Toru Yamaguchi
?
Mobile Openid
Mobile OpenidMobile Openid
Mobile Openid
Toru Yamaguchi
?
Client Side Cache
Client Side CacheClient Side Cache
Client Side Cache
Toru 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.0
Toru Yamaguchi
?
Customization of DBIC::Schema::Loader
Customization of DBIC::Schema::LoaderCustomization of DBIC::Schema::Loader
Customization of DBIC::Schema::Loader
Toru Yamaguchi
?
これからの Microservices
これからの Microservicesこれからの Microservices
これからの Microservices
Toru 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 2015
Toru 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 2015
Toru 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
?
ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platform
Toru Yamaguchi
?
mbga Open Platform and Perl
mbga Open Platform and Perlmbga Open Platform and Perl
mbga Open Platform and Perl
Toru Yamaguchi
?
Inside mbga Open Platform API architecture
Inside mbga Open Platform API architectureInside mbga Open Platform API architecture
Inside mbga Open Platform API architecture
Toru Yamaguchi
?
Introduction OpenID Authentication 2.0 Revival
Introduction OpenID Authentication 2.0 RevivalIntroduction OpenID Authentication 2.0 Revival
Introduction OpenID Authentication 2.0 Revival
Toru Yamaguchi
?
OpenID Mobile ProfileOpenID Mobile Profile
OpenID Mobile Profile
Toru Yamaguchi
?
Introduction OpenID Authentication 2.0
Introduction OpenID Authentication 2.0Introduction OpenID Authentication 2.0
Introduction OpenID Authentication 2.0
Toru 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.0
Toru Yamaguchi
?
Customization of DBIC::Schema::Loader
Customization of DBIC::Schema::LoaderCustomization of DBIC::Schema::Loader
Customization of DBIC::Schema::Loader
Toru Yamaguchi
?

Recently uploaded (7)

論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
?
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
Sojitz Tech-Innovation USA
?
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージカスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
info819904
?
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
翔栄 杉田
?
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
info819904
?
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
sugiuralab
?
鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介
鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介
鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介
鲍-22プログラミング?コンテスト运営事务局
?
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
?
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
Sojitz Tech-Innovation USA
?
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージカスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
info819904
?
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
翔栄 杉田
?
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
info819904
?
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
sugiuralab
?

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 Identi?er 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 のように 結果に対して適切なリンクを貼る事も可能

Editor's Notes