fiware - Fiware Orion 批量复制
问题描述
我正在使用 APPEND_STRICT,但无法理解某个概念。
例如,我在 Fiware Orion 中有一个实体(已经创建),并且想使用 APEND_STRINCT(v2/op/update)批量创建 1000 个实体。
在 1000 个实体中有 1 个重复(我提到的一个实体已经在 Orion 中)。
这是正确的吗,Orion 将抛出错误 422,而没有任何关于已经存在的实体的 id 的信息,错误谈论实体的属性(我理解为什么它是 APPEND_STRICT 的概念),但显示它真的会有所帮助。
另一部分是如果重复的实体位于位置 400 则 Orion 发送错误但继续写入剩余的实体,这真的很难管理,因为我不知道何时完成全部写入并且必须在 Orion 仍然显示一些响应时在后台处理它们。
我的假设是否正确,可以采取一些措施来避免这种情况,这是我没有注意到的。
谢谢。
编辑
错误信息:
{ error: 'Unprocessable',
description: 'one or more of the attributes in the request already exist:
[ family, serialNumber, refSortingType, description, refType, storedWasteOrigin, location, address, fillingLevel, cargoWeight, temperature, methaneConcentration, regulation, responsible, owner, dateServiceStarted, dateLastEmptying, nextActuationDeadline, actuationHours, openingHours, dateLastCleaning, nextCleaningDeadline, refDepositPointIsle, status, color, image, annotations, areaServed, dateModified, refDevice ]' } } }
示例请求:
{ method: 'POST',
headers:
{ 'Content-Type': 'application/json',
'Fiware-Service': 'waste4think',
'Fiware-ServicePath': '/d',
'X-Auth-Token': 'DssfKZe82e1dyJof416EmrQPdFQ3QK1' },
uri: 'http://localhost:1026/v2/op/update',
body: { actionType: 'APPEND_STRICT', entities: [Array] }
{"actionType":"APPEND_STRICT","entities":[{"id":"xxx","type":"xxx","family":{"value":"Agent","type":"String","metadata":{}},"serialNumber":{"value":"","type":"String","metadata":{}},"refSortingType":{"value":"SortingType:2","type":"String","metadata":{}},"description":{"value":"","type":"String","metadata":{}},"refType":{"value":"DepositPointType:0","type":"String","metadata":{}},"storedWasteOrigin":{"value":"","type":"String","metadata":{}},"location":{"value":{"type":"Point","coordinates":[xxx]},"type":"geo:json"},"address":{"value":"xxxxx.","type":"String","metadata":{}},"fillingLevel":{"value":0,"type":"Float","metadata":{"unit":{"value":"C62","type":"String"}}},"cargoWeight":{"value":0,"type":"Float","metadata":{"unit":{"value":"KGM","type":"String"}}},"temperature":{"value":0,"type":"Float","metadata":{"unit":{"value":"CEL","type":"String"}}},"methaneConcentration":{"value":0,"type":"Float","metadata":{"unit":{"value":"59","type":"String"}}},"regulation":{"value":"Municipal association","type":"String","metadata":{}},"responsible":{"value":"","type":"String","metadata":{}},"owner":{"value":"xxx","type":"String","metadata":{}},"dateServiceStarted":{"value":"","type":"String","metadata":{}},"dateLastEmptying":{"value":"","type":"String","metadata":{}},"nextActuationDeadline":{"value":"","type":"String","metadata":{}},"actuationHours":{"value":[],"type":"List","metadata":{}},"openingHours":{"value":[],"type":"List","metadata":{}},"dateLastCleaning":{"value":"","type":"String","metadata":{}},"nextCleaningDeadline":{"value":"","type":"String","metadata":{}},"refDepositPointIsle":{"value":"","type":"String","metadata":{}},"status":{"value":"ok","type":"String","metadata":{}},"color":{"value":"","type":"String","metadata":{}},"image":{"value":"","type":"String","metadata":{}},"annotations":{"value":"","type":"String","metadata":{}},"areaServed":{"value":"","type":"String","metadata":{}},"dateModified":{"value":"","type":"String","metadata":{}},"refDevice":{"value":"","type":"String","metadata":{}}}]}
至于请求,我将帖子部分和正文部分分开。如您所见,错误消息无法知道是什么实体导致了这种情况
解决方案
我认为功能如您所描述。Orion 使用已存在但不属于哪个实体的属性列表进行响应。像这样的回应可能更有用:
'one or more of the attributes in the request already exist:
entity23: [ family, serialNumber], entity 42: [refSortingType, description]'
有一些上限(例如多达 20 个实体)以排除太大的响应。
如果您认为实现类似的东西可能很有趣,请在 Orion 存储库中创建一个关于它的新问题,拜托。
一些额外的评论:
APPEND_STRICT
已弃用。正确的关键字是appendStrict
.- 关于
"Orion send error but continue to write remaining entities, this is really hard to manage because I cannot know when a total write is done and have to show some response while Orion still works on them in the background"
. Orion 在完成处理请求中的整个批次之前不会响应POST /v2/op/entity
。因此,您的 REST 客户端可以确保在收到响应时,所有内容都已处理(尽管该处理可能涉及由于某些实体中的重复属性而导致的错误,正如我们一直在讨论的那样)。你有没有经历过不同的行为?在那种情况下,你是怎么得到它的?(猎户座的行为方式可能是一个错误,我想知道以便调试它)。
推荐阅读
- python - 无法将 chrome 注册为默认网络浏览器
- java - Chrome 驱动程序在 linux 中启动时崩溃
- dataset - huggingface_load_dataset() 函数 quit() 没有完成
- jupyter-notebook - 更改 jupyter 内核仍然错误地导入不存在的包
- mongodb - 使用 PyMongo 连接到集群失败
- laravel - 带有 vue/vue 路由器的 Laravel 路由
- c++ - 未获得所需的输出 C++
- django - Django Elasticsearch dsl drf OR 查询
- vba - 发送带有多个附件的电子邮件
- javascript - Discord.js for 循环行为异常