Context Broker GEがエクスポートするRESTオペレーションを使用してコンテキスト情報を更新するアプリケーションアーキテクチャの一部として実行されるプロセスは、コンテキスト・プロデューサの役割を果たします。例として、レストランをレビューするためのアプリケーション(NiceEatingと呼びます)を考えてみましょう。ユーザのスマートフォン上で動作するアプリケーションのクライアント部分はコンテキスト・プロデューサの役割を果たし、レストランの評価を可能にします。

一方、Context Broker GEがエクスポートするRESTオペレーションを使用してコンテキスト情報を照会するアプリケーションアーキテクチャの一部として実行されるプロセスは、コンテキスト・コンシューマの役割を果たします。NiceEatingアプリの場合、ユーザのスマートフォンで動作し、レストランの評価をクエリできるようにするモバイルアプリケーションがコンテキスト・コンシューマの役割を果たします。アプリケーションの特定の部分は、コンテキスト・プロデューサとコンテキスト・コンシューマの両方の役割を果たす可能性があることに注意してください。これは、NiceEatingアプリのモバイルクライアントの場合であり、エンドユーザはレストランの評価について、レビューとクエリすることができます。

NiceEatingアプリケーションに関連するエンティティは、Restaurant、ClientおよびReviewsのtypeです。このガイドでは、レストランElizaldeを例として使用しています。さまざまなリクエストを実行するためにidとdepartmentを取得するために、次のものを使用できます(追加ヘッダを使用してFiware-Service: tourguide)。

GET <cb_host>:<cb_port>/v2/entities?type=Restaurant&q=name==Elizalde&attrs=name,department&options=keyValues

[
  {
    "id": "0115206c51f60b48b77e4c937835795c33bb953f",
    "type": "Restaurant",
    "name": "Elizalde"
    "department": "Franchise1"
  }
]

特定のユーザがレストランをレビューすると(例えば、0から5までのスケールで、”Client1234”はElizaldeレストランで”4”と評価され、「安くて食べやすい場所」として彼/彼女の体験が記述されます)、スマートフォンアプリケーションは、コンテキスト・プロデューサロールを果たし、次のHTTPリクエストを発行してレビュー・エンティティを作成します:

POST <cb_host>:<cb_port>/v2/entities?options=keyValues

Headers:

{
  'Content-Type':     'application/json',
  'Fiware-Service':   'tourguide'
}

Payload:

{
  "type": "Review",
  "id": "review-Elizalde-34",
  "author": "Client1234",
  "itemReviewed": "0115206c51f60b48b77e4c937835795c33bb953f",
  "reviewBody": "Cheap and nice place to eat.",
  "ratingValue": 4
}

新しいレビュー・エンティティが作成されるたびに、対応するレストランの平均レーティングがアプリケーションバックエンドによって再計算され(コンテキスト・プロデューサの役割も果たす)、レストラン・エンティティがそれに応じて更新されます:

PUT <cb_host>:<cb_port>/v2/entities/0115206c51f60b48b77e4c937835795c33bb953f/attrs/aggregateRating/value

Headers:

{
  'Content-Type':        'application/json',
  'Fiware-Service':      'tourguide'
  'Fiware-ServicePath':  '/Franchise1'
}

Payload:

{
  "reviewCount": 2,
  "ratingValue": 4
}

すべてのレストランが部門の範囲内に定義されているため、更新操作にFiware-ServicePath: /Franchise1ヘッダが必要であることに注意してください。このオプションの詳細については、http://fiware-orion.readthedocs.io/en/master/user/service_path/ を参照してください。

また、スマートフォンアプリケーションを使用して、特定のレストランの情報を取得することもできます。その場合、アプリケーションはコンテキスト・コンシューマとして動作し、レストラン・エンティティのクエリを実行します。たとえば、aggregateRating属性を取得するには、クライアントアプリケーションは次の方法で(追加のヘッダFiware-Service: tourguideを使用して)クエリを実行します:

GET <cb_host>:<cb_port>/v2/entities/0115206c51f60b48b77e4c937835795c33bb953f/attrs/aggregateRating/value

{
  "reviewCount": 2,
  "ratingValue": 4
}

"Elizalde"レストランのすべての属性の値を1回のリクエストで取得することもできます((追加のヘッダFiware-Service: tourguideを使用して):

GET <cb_host>:<cb_port>/v2/entities/0115206c51f60b48b77e4c937835795c33bb953f

{
  "id": "0115206c51f60b48b77e4c937835795c33bb953f",
  "type": "Restaurant",
  "address": {
    "type": "PostalAddress",
    "value": {
      "streetAddress": "Cuesta de las Cabras Aldapa 2",
      "addressRegion": "Araba",
      "addressLocality": "Alegría-Dulantzi",
      "postalCode": "01240"
    },
    "metadata": {}
  },
  "aggregateRating": {
    "type": "StructuredValue",
    "value": {
      "reviewCount": 2,
      "ratingValue": 4
    },
    "metadata": {}
  },
  "capacity": {
    "type": "PropertyValue",
    "value": 80,
    "metadata": {}
  },
  "department": {
    "type": "Text",
    "value": "Franchise1",
    "metadata": {}
  },
  "description": {
    "type": "Text",
    "value": "Restaurante de estilo sidrería ubicado en Alegria-Dulantzi. Además ...",
    "metadata": {}
  },
  "location": {
    "type": "geo:point",
    "value": "42.8404625, -2.5123277",
    "metadata": {}
  },
  "name": {
    "type": "Text",
    "value": "Elizalde",
    "metadata": {}
  },
  "occupancyLevels": {
    "type": "PropertyValue",
    "value": 0,
    "metadata": {
      "timestamp": {
        "type": "DateTime",
        "value": "2016-04-20T18:15:15.434Z"
      }
    }
  },
  "priceRange": {
    "type": "Number",
    "value": 0,
    "metadata": {}
  },
  "telephone": {
    "type": "Text",
    "value": "945 400 868",
    "metadata": {}
  }
}

また、属性値のみを取得する場合、次のように、keyValuesパラメータを使用できます(追加のヘッダFiware-Service: tourguideを使用して):

GET <cb_host>:<cb_port>/v2/entities/0115206c51f60b48b77e4c937835795c33bb953f?options=keyValues

{
  "id": "0115206c51f60b48b77e4c937835795c33bb953f",
  "type": "Restaurant",
  "address": {
    "streetAddress": "Cuesta de las Cabras Aldapa 2",
    "addressRegion": "Araba",
    "addressLocality": "Alegría-Dulantzi",
    "postalCode": "01240"
  },
  "aggregateRating": {
    "reviewCount": 2,
    "ratingValue": 4
  },
  "capacity": 80,
  "department": "Franchise1",
  "description": "Restaurante de estilo sidrería ubicado en Alegria-Dulantzi. Además ...",
  "location": "42.8404625, -2.5123277",
  "name": "Elizalde",
  "occupancyLevels": 0,
  "priceRange": 0,
  "telephone": "945 400 868"
}

最後に、アプリケーションは属性の内容でエンティティをクエリできます。たとえば、座席数(capacity)が50以上のすべてのレストランを取得するには、次のリクエストを使用できます(追加のヘッダFiware-Service: tourguideを使用して):

GET <cb_host>:<cb_port>/v2/entities?type=Restaurant&q=capacity>=50&options=keyValues

[
  {
    "id": "0115206c51f60b48b77e4c937835795c33bb953f",
    "type": "Restaurant",
    "address": {
      "streetAddress": "Cuesta de las Cabras Aldapa 2",
      "addressRegion": "Araba",
      "addressLocality": "Alegría-Dulantzi",
      "postalCode": "01240"
    },
    "aggregateRating": {
      "reviewCount": 2,
      "ratingValue": 4
    },
    "capacity": 80,
    "department": "Franchise1",
    "description": "Restaurante de estilo sidrería ubicado en Alegria-Dulantzi. Además ...",
    "location": "42.8404625, -2.5123277",
    "name": "Elizalde",
    "occupancyLevels": 0,
    "priceRange": 0,
    "telephone": "945 400 868"
  },
  {
    "id": "34f036f9eef1f403c0ea66c55b8cdbace4b5f7a6",
    "type": "Restaurant",
    "address": {
      "streetAddress": "Avenida de Los Huetos 17",
      "addressRegion": "Álava",
      "addressLocality": "Vitoria-Gasteiz",
      "postalCode": "01010"
    },
    "aggregateRating": {
      "reviewCount": 1,
      "ratingValue": 3
    },
    "capacity": 50,
    "department": "Franchise4",
    "description": "El restaurante Araba cuenta con amplios salones para todo tipo de celebraciones, ...",
    "location": "42.8538811, -2.7006836",
    "name": "Araba",
    "occupancyLevels": 0,
    "priceRange": 42,
    "telephone": "945 222 669",
    "url": "http://www.restaurantearaba.com/"
  },
  {
    "id": "92e960de796a8cc48ed7c784119f7d5628e31a6f",
    "type": "Restaurant",
    "address": {
      "streetAddress": "Maskuribai Kalea",
      "addressRegion": "Araba",
      "addressLocality": "Amurrio",
      "postalCode": "01470"
    },
    "aggregateRating": {
      "reviewCount": 4,
      "ratingValue": 4
    },
    "capacity": 160,
    "department": "Franchise1",
    "description": "Bodega adscrita a la Denominación de Origen Arabako Txakolina y que elabora el 95% de la producción total ...",
    "location": "43.047415, -3.0007716",
    "name": "Arabako Txakolina, S.L.",
    "occupancyLevels": 0,
    "priceRange": 0,
    "telephone": "645 713 355",
    "url": "http://www.xarmant.net/"
  }
]