fiware-orion - 如何在 Orion Context Broker 注册到 Context Provider 时包含 fiware-service 和 fiware-servicePath 标头?
问题描述
我们正在研究使用本地 Docker 容器的 Orion Context Broker 技术,并尝试将本地 Context Broker 与外部 Context Provider 集成。
具体来说,我们正在尝试从这个 Context 提供程序中检索数据:
https://streams.lab.fiware.org/v2/entities?type=AirQualityObserved&options=keyValues
使用标题:
固件服务:环境
固件服务路径:/马德里
具体来说,我们的目标是实现从我们的 Context Broker 到提供者的这个节点的注册,以便获得一些我们在本地没有的属性(在该示例中,该属性称为“NO”)。
我们发送的注册请求如下:
curl -iX POST \
'http://localhost:1026/v2/registrations' \
-H 'Content-Type: application/json' \
-d '{
"description": "Air Quality Madrid",
"dataProvided": {
"entities": [
{
"id": "Madrid-AirQualityObserved-28079059-latest",
"type": "AirQualityObserved"
}
],
"attrs": [
"NO"
]
},
"provider": {
"http": {
"url": "https://streams.lab.fiware.org"
}
}
}'
此外,我们创建了一个本地实体,其 ID 与请求中的相同:Madrid-AirQualityObserved-28079059-latest
在获得这些信息之后,问题是:
是否可以在注册请求中包含特定的 fiware-service 和 fiware-servicePath 标头?包含它们的方法是什么?
提前致谢。
编辑:
我一直在使用以下命令进行更多测试:
要注册到上下文提供程序,请使用所需服务的特定标头。目前,本地实体不是在本地上下文代理中创建的。
curl -iX POST \
'http://localhost:1026/v2/registrations' \
-H 'Content-Type: application/json' \
-H 'fiware-service: environment' \
-H 'fiware-servicepath: /Madrid' \
-d '{
"description": "Air Quality Madrid",
"dataProvided": {
"entities": [
{
"id": "Madrid-AirQualityObserved-28079059-latest",
"type": "AirQualityObserved"
}
],
"attrs": [
"NO"
]
},
"provider": {
"http": {
"url": "https://streams.lab.fiware.org"
}
}
}'
然后,我检查了注册是否已正确注册:
curl -X GET http://localhost:1026/v2/registrations \
-H 'fiware-service: environment'
-H 'fiware-servicepath: /Madrid'
最后,我尝试从提供者那里检索实体:
curl -X GET http://localhost:1026/v2/entities/Madrid-AirQualityObserved-28079059-latest \
-H 'fiware-service: environment' \
-H 'fiware-servicepath: /Madrid'
但是响应表明该请求没有任何实体。因此,我在本地上下文代理中创建了实体,不包括我试图从提供者“NO”获取的字段。
curl -iX POST \
'http://localhost:1026/v2/entities' \
-H 'Content-Type: application/json' \
-H 'fiware-service: environment' \
-H 'fiware-servicepath: /Madrid' \
-d '
{
"id": "Madrid-AirQualityObserved-28079059-latest",
"type": "AirQualityObserved"
}'
但是,如果我咨询 ID 为 Madrid-AirQualityObserved-28079059-latest 的实体,我将收到本地数据,并且未从提供商处检索到“NO”字段。那是响应(缺少 NO 字段):
{
"id": "Madrid-AirQualityObserved-28079059-latest",
"type": "AirQualityObserved"
}
我做错了什么?
解决方案
是的,这是可能的。
它们作为常规标题包含在内。例如,如果您使用 curl,它将类似于-H 'fiware-service: environment' -H 'fiware-servicepath: /Madrid'
.
编辑:
查看您正在使用的查询请求:
curl -X GET http://localhost:1026/v2/entities/Madrid-AirQualityObserved-28079059-latest \
-H 'fiware-service: environment' \
-H 'fiware-servicepath: /Madrid'
我看到查询中没有包含实体类型,这与上下文提供程序和请求转发文档中的建议相反:
在转发时,NGSIv2 更新/查询中的任何类型的实体都匹配没有实体类型的注册。但是,相反的方法不起作用,因此如果您注册了类型,那么您必须
?type
在 NGSIv2 更新/查询中使用才能获得匹配。否则,您可能会遇到问题,例如StackOverflow上的这篇文章中描述的问题。
所以也许你应该使用:
curl -X GET http://localhost:1026/v2/entities/Madrid-AirQualityObserved-28079059-latest?type=AirQualityObserved \
-H 'fiware-service: environment' \
-H 'fiware-servicepath: /Madrid'
推荐阅读
- javascript - 如何使用 React 实现导航栏
- windows - 在 Docker windowsservercore 容器中运行 MFC 应用程序
- mysql - 希望 SQL Server CONSTRAINT 不允许某个特定的字符串
- unix - My exit commands are not working right
- c# - 我可以根据 .NET Core 中的运行时标识符定义常量吗?
- ipython - Jupyter 笔记本 --- (
标签)被呈现不同的颜色 - ios - QueryLimited(toLast:1) firebase Chat Mesenger Swift
- javafx - 从其他类 JavaFX 执行方法
- git - 将上下文差异转换为统一差异格式
- amazon-web-services - 如何使用 AWS WAF 阻止某些 URL