更新アクション・タイプ (Update action types)¶
POST /v1/updateContext
(NGSIv1) と POST /v2/op/update
はどちらも actionType
フィールドを使用します。値は次のものです :
append
(NGSIv2) またはAPPEND
(NGSIv1)appendStrict
(NGSIv2) またはAPPEND_STRICT
(NGSIv1)update
(NGSIv2) またはUPDATE
(NGSIv1)delete
(NGSIv2) またはDELETE
(NGSIv1)replace
(NGSIv2) またはREPLACE
(NGSIv1)
actionType の値については、次のサブセクションで説明します。NGSIv2 の場合、RESTful なオペレーションと同等のものが記述されています (詳細は NGSI v2 仕様を参照してください)。NGSIv1 の場合には、同様のオペレーションがコンビニエンス・オペレーションとしてあります (最後の例はそれらを例示しています)。
append
¶
このアクション・タイプは、エンティティの作成、既存エンティティの属性の作成、および既存エンティティの既存属性の更新に使用されます。後者の場合は、update
と同じです。
NGSIv2 では、POST /v2/entities
(エンティティがまだ存在しない場合) または POST /v2/entities/<id>/attrs
(エンティティがすでに存在する場合) にマップされます。
appendStrict
¶
このアクション・タイプは、既存エンティティのエンティティまたは属性の作成に使用されます。既存属性を更新するためにこの属性を使用しようとすると (append
が許可するように)、エラーが発生します。
NGSIv2 では、POST /v2/entities
(エンティティがまだ存在しない場合) または POST /v2/entities/<id>/attrs?options=append
(エンティティがすでに存在する場合) にマップされます。
update
¶
このアクション・タイプは、既存属性の変更に使用されます。新しいエンティティまたは属性 (append
または appendStrict
が許可するように) を作成するためにそれを使用しようとすると、エラーが発生します。
NGSIv2 では、それは PATCH /v2/entities/<id>/attrs
にマップされます。
delete
¶
このアクション・タイプは、既存のエンティティ (エンティティ自体を削除せずに) の属性の削除やエンティティの削除に使用されます。
NGSIv2 では、それは、エンティティに含まれるすべての属性の DELETE/v2/entities/<id>/attrs/<attrName>
にマッピングされるか、エンティティに属性がない場合は DELETE /v2/entities/<id>
を削除します。
replace
¶
このアクション・タイプは、既存エンティティの属性の置換に使用されます。つまり、既存のすべての属性が削除され、リクエストに含まれる属性が追加されます。
NGSIv2 では、それは PUT /v2/entities/<id>/attrs
にマップされます。
NGSIv1 での属性の作成と削除の例¶
新しいエンティティを作成するために、APPEND アクション・タイプで updateContext を使用する方法を見てきました。さらに、APPEND を使用して、エンティティ作成後に新しい属性を追加することができます。これを例を使って説明しましょう。
最初に、'A' という名前の属性を持つ単純なエンティティ 'E1' を作成します :
(curl localhost:1026/v1/updateContext -s -S --header 'Content-Type: application/json' \
--header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF
さて、新しい属性を追加するために (それを 'B' と名づけましょう)、'E1' と一致する entityId で updateContext APPEND を使用します :
(curl localhost:1026/v1/updateContext -s -S --header 'Content-Type: application/json' \
--header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF
{
"contextElements": [
{
"type": "T",
"isPattern": "false",
"id": "E1",
"attributes": [
{
"name": "A",
"type": "TA",
"value": "1"
}
]
}
],
"updateAction": "APPEND"
}
EOF
A と B の両方の属性が存在することをそのエンティティへのクエリで確認できます :
(curl localhost:1026/v1/contextEntities/E1 -s -S --header 'Content-Type: application/json' \
--header 'Accept: application/json' | python -mjson.tool)<<EOF
{
"contextElement": {
"attributes": [
{
"name": "B",
"type": "TB",
"value": "2"
},
{
"name": "A",
"type": "TA",
"value": "1"
}
],
"id": "E1",
"isPattern": "false",
"type": ""
},
"statusCode": {
"code": "200",
"reasonPhrase": "OK"
}
}
EOF
APPEND は、既存のコンテキスト要素の UPDATE として解釈されます。ただし、APPEND ではなく APPEND_STRICT を updateAction として使用できます。APPEND_STRICT を使用すると、既存の属性は更新されませんが、エラーが報告されます。APPEND_STRICT リクエストにいくつかの属性 (A や B など) が含まれていて、存在するものと存在しないもの (A が存在し、B が存在しないものなど) がある場合、存在しない属性が追加されます、B が追加されます)、既存のものについてエラーが報告されます (この場合、すでに存在する A についてのエラーが報告されます)。
DELETE アクション・タイプを使用して、同様の方法で属性を削除することもできます。たとえば、属性 'A' を削除するには、次のようにします (空の contextValue 要素に注意してください) :
(curl localhost:1026/v1/updateContext -s -S --header 'Content-Type: application/json' \
--header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF
{
"contextElements": [
{
"type": "T",
"isPattern": "false",
"id": "E1",
"attributes": [
{
"name": "A",
"type": "TA",
"value": ""
}
]
}
],
"updateAction": "DELETE"
}
EOF
今、エンティティのクエリは属性 B を示します :
(curl localhost:1026/v1/contextEntities/E1 -s -S --header 'Content-Type: application/json' \
--header 'Accept: application/json' | python -mjson.tool) <<EOF
{
"contextElement": {
"attributes": [
{
"name": "B",
"type": "TB",
"value": "2"
}
],
"id": "E1",
"isPattern": "false",
"type": ""
},
"statusCode": {
"code": "200",
"reasonPhrase": "OK"
}
}
EOF
POST および DELETE メソッドを使用したコンビニエンス・オペレーションを使用して、属性を追加および削除することもできます。以下を試してください :
新しい属性 'C' と 'D' を追加します :
(curl localhost:1026/v1/contextEntities/E1 -s -S --header 'Content-Type: application/json' \
--header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF
{
"attributes": [
{
"name": "C",
"type": "TC",
"value": "3"
},
{
"name": "D",
"type": "TD",
"value": "4"
}
]
}
EOF
属性 'B' を削除 :
curl localhost:1026/v1/contextEntities/E1/attribute/B -s -S \
--header 'Content-Type: application/json' -X DELETE \
--header 'Accept: application/json' | python -mjson.tool
エンティティのクエリ。'C' と 'D' は表示されますが、'B' は表示されません :
(curl localhost:1026/v1/contextEntities/E1 -s -S --header 'Content-Type: application/json' \
--header 'Accept: application/json' | python -mjson.tool) <<EOF
{
"contextElement": {
"attributes": [
{
"name": "C",
"type": "TC",
"value": "3"
},
{
"name": "D",
"type": "TD",
"value": "4"
}
],
"id": "E1",
"isPattern": "false",
"type": ""
},
"statusCode": {
"code": "200",
"reasonPhrase": "OK"
}
}
EOF
特定のエンティティから個々の属性を削除することとは別に、すべての属性とそれに対応するメタデータを含むエンティティ全体を削除することもできます。そのためには、次の例のように、actionType として DELETE を使用し、属性のリストを除いた updateContext オペレーションが使用されます :
(curl localhost:1026/v1/updateContext -s -S --header 'Content-Type: application/json' \
--header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF
{
"contextElements": [
{
"type": "T",
"isPattern": "false",
"id": "E1"
}
],
"updateAction": "DELETE"
}
EOF
次の同等のコンビニエンス・オペレーションを使用することもできます :
curl localhost:1026/v1/contextEntities/E1 -s -S \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' -X DELETE