Как запросить все услуги (группы) из йотагента - PullRequest
1 голос
/ 27 февраля 2020

Нам сложно понять значение различных уровней иерархии, предоставляемых iotagent. Существует fiware-сервис, fiware-servicepath, а под ним - набор сервисов, с которыми, в свою очередь, связаны устройства.

Теперь мы поняли, как запрашивать все устройства и все сервисы под заданным fiware-service и fiware-servicepath. Мы также поняли, как запрашивать все пути fiware-service, заданные для определенного fiware-сервиса. Но как запросить все эти fiware-сервисы «верхнего уровня»?

Наша цель - создать пользовательский интерфейс управления устройствами, который позволит конечному пользователю подготовить и отменить предоставление устройств, которыми он управляет. Возможно, у нас неправильное представление о fiware-сервисе, но, поскольку можно добавить такие сервисы с помощью определенного запроса POST, мы ожидаем, что мы сможем каким-то образом запросить все эти сервисы. Чего нам не хватает?

Если на самом деле нет способа запросить услуги верхнего уровня, я бы хотел спросить об этом, поскольку я не могу найти это в документации.

1 Ответ

0 голосов
/ 06 марта 2020

В NGSI-v2 все посредники контекста неявно являются мультитенантными. Использование другого fiware-service для ваших подготовленных устройств должно подразумевать, что устройства и их данные принадлежат отдельной коммерческой компании, поэтому не должно быть необходимости извлекать и объединять подготовленные устройства из отдельных задач.

При использовании Параметр mon go -DB с агентом IoT, fiware-service помогает предоставить уникальное имя базы данных для каждой арендованной услуги.

Не нужно объединять данные агента IoT (службы и устройства) однако может быть допустимым вариантом использования для объединения контекстных данных, поступающих от отдельных арендаторов (конечно, после получения юридического соглашения от каждой стороны) - в этом случае вы можете создать простой прокси-обработчик, способный обрабатывать конечные точки /v2/op/query и / или /v2/op/update и пересылка запроса с измененными заголовками.

const express = require('express');
const router = express.Router();
const request = require('request-promise');

const BASE_PATH =
  process.env.CONTEXT_BROKER || 'http://localhost:1026/v2';

function forwardRequest(req, res) {

// Add necessary validation

  const headers = req.headers;
  headers['fiware-service' : 'XXXX'];
  headers['fiware-servicepath': 'YYYY'];
  headers['Accept': 'application/json'];

  const options = {
    url: BASE_PATH + req.path,
    method: req.method,
    headers,
    json: true
  };

  request(options)
    .then(async function(cbResponse) {
      return res.send(compacted);
    })
    .catch(function(err) {
      return res.send(err);
    });
}

router.post(
  '/op/query', forwardRequest
);
...