如何实施一个FIWARE项目

How to implement a FIWARE project


大家好,完成有关 NGSI-LD 的教程后: https://github.com/fiware/tutorials.NGSI-LD/ 我目前正在尝试实现我的数据模型并面临多个问题。

首先我知道什么是 JSON、JSON-LD 和 NGSI-LD,以及上下文代理和 MongoDB 如何协同工作的基础知识。

我的问题是如何设置这样的项目。我没有找到任何关于如何设置项目的教程。我需要知道的要点是:

现在我尝试使用以下教程将我的数据模型转换为 json-ld 和 ngsi-ld: https://github.com/FIWARE/tutorials.Understanding-At-Context/tree/ba6ac22ce329ed8eaac6ef5f01266048dc84d244

之后我从像 CRUD-OPerations 这样的教程中删除了数据模型并插入了我的数据模型。但是当我开始教程并发出 POST 请求时,它会接受任何数据,而忽略数据模型。我可以创建具有不存在属性的数据模型中不存在的实体。如果我使用默认数据模型开始一个教程,也会出现同样的问题。所以它似乎总是忽略上下文文件。

在我使用 POST 写入一些数据并使用 GET 读取(两者都运行良好)并关闭项目之后,下一个问题出现了。重启教程后,我写的所有数据都被删除了。

我是不是没有真正理解 FIWARE 的全部要点,还是我做错了什么?

我将不胜感激从链接到详细解释的任何信息。

如上所述here, the NGSI-LD interface is a flexible API which outputs various JSON and JSON-LD格式化并用于数据交换。这些教程仅描述 接口的正确使用 。它们不包括生产部署。

After I restart the tutorial all data i have written is deleted.

教程就是这样 - 它们从零开始。 docker-file 中的 Mongo-DB 实例没有 persistent volume 并自行清理。

it accepts any data, ignoring the data-model.

那是因为 JSON-LD @context 不习惯 validate JSON data - you need a JSON schema for that. Technically the @vocab element in the NGSI-LD core context @context file pushes any unknown elements onto the so-called default context https://uri.etsi.org/ngsi-ld/default-context/. The @context file is simply providing a mechanism to standardize the attribute names into IRIs. Assuming you have created a Swagger/Open API file for your use case, then you can use the Swagger editor 生成服务器或客户端代码存根。在 Java 中执行此操作会导致 POJO 仅接受模型的属性。

How to setup the orion context broker

您可以使用提供的 docker-compose 作为入门的基础,但对于 Kubernetes 上的适当大规模部署,提供的 Helm Charts are recommended. The Orion-LD documentation 有更多详细信息。

How to provide the context File to the Context Broker

您将 @context 文件放在 public 网络服务器上。如何托管 @context 文件由您决定。教程使用 HTTPD for this purpose. The main idea behind an @context is that you are publishing an agreed set of IRIs which correspond to the attributes in your data. Smart Data Models, Schema.org, GS1 并且许多其他机构生成 IRI,您应该重用它们并 link 给它们或发布您自己的 @context 描述您自己的世界。

一旦 @context 只需将 Link header 附加到每个上下文代理请求。

'Link: <http://path/to/my/context/ngsi-context.jsonld>; rel="http://www.w3.org/ns/json-ld#context"; type="application/ld+json"'

How to setup MongoDB

您可以阅读有关官方Mongo-DB图片的信息here - there are plenty of tutorials out there which discuss persistence-storage

如果您为每个正在使用的 NGSILD-Tenant 添加索引,您将获得更好的性能 - 默认名为 orion:

    conn = new Mongo();db.createCollection("orion");
    db = conn.getDB("orion");
    db.createCollection("entities");
    db.entities.createIndex({"_id.servicePath": 1, "_id.id": 1, "_id.type": 1}, {unique: true});
    db.entities.createIndex({"_id.type": 1});
    db.entities.createIndex({"_id.id": 1});

How to connect all of the above together to a project

教程慢慢搭建了一个toy example,但显然水平很有限。这是一个非常广泛的主题 - 你最好进一步询问 training or consultancy via the FIWARE Marketplace or your local FIWARE iHub