API и пакеты SDK для Azure Digital Twins
В этой статье представлен обзор доступных API-интерфейсов Azure Digital Twins и методов взаимодействия с ними. Интерфейсы REST API можно использовать непосредственно с связанными Swaggers или с помощью пакета SDK.
Azure Digital Twins оснащен API плоскости управления, API плоскости данных и пакетами SDK для управления экземпляром и его элементами.
- API уровня управления — это API Azure Resource Manager (ARM). Они распространяются на операции управления ресурсами, такие как создание и удаление экземпляра.
- API плоскости данных — это интерфейсы API Azure Digital Twins, которые используются для операций управления данными, таких как управление моделями, двойниками и графами.
- Пакеты SDK используют существующие API, чтобы упростить разработку пользовательских приложений, использующих Azure Digital Twins.
Общие сведения о плоскости управления
API уровня управления — это интерфейсы API ARM, используемые для управления экземпляром Azure Digital Twins в целом, поэтому они охватывают такие операции, как создание или удаление всего экземпляра. Они также используются для создания и удаления конечных точек.
Чтобы вызвать API напрямую, обратитесь к последней папке Swagger в репозитории Swagger уровня управления. В эту папку также входит папка примеров, в которых показано использование.
Ниже приведены пакеты SDK, доступные в настоящее время для API плоскости управления Azure Digital Twins.
Вы также можете выполнять api плоскости управления, взаимодействуя с Azure Digital Twins с помощью портал Azure и CLI.
Общие сведения о плоскости данных
API плоскости данных — это API-интерфейсы Azure Digital Twins, используемые для управления элементами в вашем экземпляре Azure Digital Twins. К ним относятся такие операции, как создание маршрутов, отправка моделей, создание связей и управление двойниками. Их можно разделить на следующие категории:
-
DigitalTwinModels
— Категория DigitalTwinModels содержит API для управления моделями в экземпляре Azure Digital Twins. К действиям управления относятся передача, проверка, извлечение и удаление моделей, созданных в DTDL. -
DigitalTwins
— Категория DigitalTwins содержит API, которые позволяют разработчикам создавать, изменять и удалять цифровые двойники и их связи в экземпляре Azure Digital Twins. -
Query
— Категория "Запрос" позволяет разработчикам находить наборы цифровых двойников в графе двойников между связями. -
Event Routes
— Категория "Маршруты событий" содержит API-интерфейсы для маршрутизации данных через систему и подчиненные службы. -
Import Jobs
— API импорта заданий позволяет управлять длительным асинхронным действием для импорта моделей, двойников и связей в массовом режиме. -
Delete Jobs
— API удаления заданий позволяет управлять длительным асинхронным действием для удаления всех моделей, двойников и связей в экземпляре.
Чтобы вызвать API напрямую, обратитесь к последней папке Swagger в репозитории Swagger плоскости данных. В эту папку также входит папка примеров, в которых показано использование. Вы также можете просмотреть справочную документацию по API плоскости данных.
Ниже приведены пакеты SDK, доступные в настоящее время для API плоскости данных Azure Digital Twins.
Вы также можете выполнять api плоскости данных, взаимодействуя с Azure Digital Twins с помощью интерфейса командной строки.
Массовый импорт с помощью API импорта заданий
API импорта заданий — это API плоскости данных, который позволяет импортировать набор моделей, двойников и (или) связей в одном вызове API. Операции API импорта заданий также включаются в команды CLI и пакеты SDK плоскости данных. Использование API заданий импорта требует использования Хранилище BLOB-объектов Azure.
Проверка разрешений
Чтобы использовать API импорта заданий, необходимо включить параметры разрешений, описанные в этом разделе.
Сначала необходимо назначаемое системой управляемое удостоверение для экземпляра Azure Digital Twins. Инструкции по настройке управляемого системой удостоверения для экземпляра см. в разделе "Включение и отключение управляемого удостоверения" для экземпляра.
У вас должны быть разрешения на запись в экземпляре Azure Digital Twins для следующих категорий действий данных:
Microsoft.DigitalTwins/jobs/*
- Все элементы графа, которые необходимо включить в вызов заданий. Это может включать
Microsoft.DigitalTwins/models/*
,Microsoft.DigitalTwins/digitaltwins/*
и /илиMicrosoft.DigitalTwins/digitaltwins/relationships/*
.
Встроенная роль, предоставляющая все эти разрешения, — это владелец данных Azure Digital Twins. Вы также можете использовать пользовательскую роль для предоставления детального доступа только к нужным типам данных. Дополнительные сведения о ролях в Azure Digital Twins см. в статье "Безопасность для решений Azure Digital Twins".
Примечание.
При попытке вызова API импорта заданий и отсутствуют разрешения на запись в один из типов элементов графа, которые вы пытаетесь импортировать, задание пропускает этот тип и импортирует другие. Например, если у вас есть доступ на запись к моделям и двойникам, но не связи, попытка массового импорта всех трех типов элементов выполняется только при импорте моделей и двойников. Состояние задания отражает сбой, а сообщение указывает, какие разрешения отсутствуют.
Кроме того, необходимо предоставить следующие разрешения RBAC управляемому удостоверению, назначаемого системой экземпляра Azure Digital Twins, чтобы получить доступ к входным и выходным файлам в контейнере Хранилище BLOB-объектов Azure:
- Средство чтения данных BLOB-объектов хранилища для контейнера входных BLOB-объектов служба хранилища Azure
- Участник данных BLOB-объектов хранилища для контейнера выходных BLOB-объектов служба хранилища Azure
Наконец, создайте маркер носителя, который можно использовать в запросах к API заданий. Инструкции см. в разделе "Добавление маркера носителя".
Форматирование данных
API принимает входные данные графа из файла NDJSON , который необходимо передать в контейнер хранилища BLOB-объектов Azure. Файл начинается с Header
раздела, за которым следует необязательные разделы Models
, Twins
а Relationships
также . Вам не нужно включать в файл все три типа данных графа, но все разделы, которые присутствуют, должны соответствовать этому порядку. Двойники и связи, созданные с помощью этого API, могут дополнительно включать инициализацию их свойств.
Ниже приведен пример входного файла данных для API импорта:
{"Section": "Header"}
{"fileVersion": "1.0.0", "author": "foobar", "organization": "contoso"}
{"Section": "Models"}
{"@id":"dtmi:com:microsoft:azure:iot:model0;1","@type":"Interface","contents":[{"@type":"Property","name":"property00","schema":"integer"},{"@type":"Property","name":"property01","schema":{"@type":"Map","mapKey":{"name":"subPropertyName","schema":"string"},"mapValue":{"name":"subPropertyValue","schema":"string"}}},{"@type":"Relationship","name":"has","target":"dtmi:com:microsoft:azure:iot:model1;1","properties":[{"@type":"Property","name":"relationshipproperty1","schema":"string"},{"@type":"Property","name":"relationshipproperty2","schema":"integer"}]}],"description":{"en":"This is the description of model"},"displayName":{"en":"This is the display name"},"@context":"dtmi:dtdl:context;2"}
{"@id":"dtmi:com:microsoft:azure:iot:model1;1","@type":"Interface","contents":[{"@type":"Property","name":"property10","schema":"string"},{"@type":"Property","name":"property11","schema":{"@type":"Map","mapKey":{"name":"subPropertyName","schema":"string"},"mapValue":{"name":"subPropertyValue","schema":"string"}}}],"description":{"en":"This is the description of model"},"displayName":{"en":"This is the display name"},"@context":"dtmi:dtdl:context;2"}
{"Section": "Twins"}
{"$dtId":"twin0","$metadata":{"$model":"dtmi:com:microsoft:azure:iot:model0;1"},"property00":10,"property01":{"subProperty1":"subProperty1Value","subProperty2":"subProperty2Value"}}
{"$dtId":"twin1","$metadata":{"$model":"dtmi:com:microsoft:azure:iot:model1;1"},"property10":"propertyValue1","property11":{"subProperty1":"subProperty1Value","subProperty2":"subProperty2Value"}}
{"Section": "Relationships"}
{"$dtId":"twin0","$relationshipId":"relationship","$targetId":"twin1","$relationshipName":"has","relationshipProperty1":"propertyValue1","relationshipProperty2":10}
Совет
Пример проекта, который преобразует модели, двойники и связи в NDJSON, поддерживаемый API импорта, см . в статье Azure Digital Twins Bulk Import NDJSON Generator. Пример проекта написан для .NET и может быть скачан или адаптирован для создания собственных файлов импорта.
После создания файла отправьте его в блочный большой двоичный объект в Хранилище BLOB-объектов Azure с помощью предпочтительного метода отправки (некоторые параметры — команда AzCopy, Azure CLI или портал Azure). Вы используете URL-адрес хранилища BLOB-объектов файла NDJSON в тексте вызова API заданий импорта.
Запуск задания импорта
Теперь можно продолжить вызов API заданий импорта. Подробные инструкции по импорту полного графа в одном вызове API см. в статье "Отправка моделей, двойников и связей" с помощью API импорта заданий. Api заданий импорта можно также использовать для импорта каждого типа ресурса независимо. Дополнительные сведения об использовании API импорта заданий с отдельными типами ресурсов см. в инструкциях API импорта заданий для моделей, двойников и связей.
В тексте вызова API укажите URL-адрес хранилища BLOB-объектов входного файла NDJSON. Вы также предоставляете новый URL-адрес хранилища BLOB-объектов, чтобы указать, где должен храниться выходной журнал после создания службы.
Внимание
Убедитесь, что управляемое удостоверение, назначаемое системой экземпляра Azure Digital Twins, имеет разрешения RBAC хранилища BLOB-объектов, описанные в разделе "Проверка разрешений".
По мере выполнения задания импорта структурированный журнал выходных данных создается службой и сохраняется в качестве нового добавочного большого двоичного объекта в контейнере BLOB-объектов в URL-адресе, указанном для выходного БОЛЬШОго двоичного объекта в запросе. Ниже приведен пример журнала выходных данных для успешного импорта моделей, двойников и связей заданий:
{"timestamp":"2022-12-30T19:50:34.5540455Z","jobId":"test1","jobType":"Import","logType":"Info","details":{"status":"Started"}}
{"timestamp":"2022-12-30T19:50:37.2406748Z","jobId":"test1","jobType":"Import","logType":"Info","details":{"section":"Models","status":"Started"}}
{"timestamp":"2022-12-30T19:50:38.1445612Z","jobId":"test1","jobType":"Import","logType":"Info","details":{"section":"Models","status":"Succeeded"}}
{"timestamp":"2022-12-30T19:50:38.5475921Z","jobId":"test1","jobType":"Import","logType":"Info","details":{"section":"Twins","status":"Started"}}
{"timestamp":"2022-12-30T19:50:39.2744802Z","jobId":"test1","jobType":"Import","logType":"Info","details":{"section":"Twins","status":"Succeeded"}}
{"timestamp":"2022-12-30T19:50:39.7494663Z","jobId":"test1","jobType":"Import","logType":"Info","details":{"section":"Relationships","status":"Started"}}
{"timestamp":"2022-12-30T19:50:40.4480645Z","jobId":"test1","jobType":"Import","logType":"Info","details":{"section":"Relationships","status":"Succeeded"}}
{"timestamp":"2022-12-30T19:50:41.3043264Z","jobId":"test1","jobType":"Import","logType":"Info","details":{"status":"Succeeded"}}
По завершении задания вы увидите общее количество приемных сущностей с помощью метрики BulkOperationEntityCount.
Также можно отменить выполняемое задание импорта с помощью операции "Отмена" из API заданий импорта. После отмены задания и его завершения вы можете удалить.
Ограничения и рекомендации
При работе с API заданий импорта следует учитывать следующие рекомендации.
- Задания импорта не являются атомарными операциями. Нет отката в случае сбоя, частичного завершения задания или использования операции Отмены.
- В экземпляре Azure Digital Twins поддерживается только одно массовое задание. Эти сведения и другие числовые ограничения API заданий можно просмотреть в ограничениях Azure Digital Twins.
Массовое удаление с помощью API удаления заданий
API удаления заданий — это API плоскости данных, который позволяет удалять все модели, двойники и связи в экземпляре с одним вызовом API. Операции API удаления заданий также доступны в виде команд CLI. Ознакомьтесь с документацией по API, чтобы просмотреть сведения о запросе для создания задания удаления и проверки его состояния.
Чтобы убедиться, что все элементы удалены, следуйте этим рекомендациям при использовании API удаления заданий:
- Инструкции по созданию маркера носителя для проверки подлинности запросов API см. в разделе "Добавление маркера носителя".
- Если вы недавно импортировали большое количество сущностей в граф, подождите некоторое время и убедитесь, что все элементы синхронизированы в графе перед началом задания удаления.
- Остановите все операции с экземпляром, особенно операции отправки, пока задание удаления не завершится.
В зависимости от размера удаленного графа задание удаления может занять от нескольких минут до нескольких часов.
Время ожидания по умолчанию для задания удаления — 12 часов, которое можно настроить на любое значение в диапазоне от 15 минут до 24 часов с помощью параметра запроса в API. Это время выполнения задания удаления до истечения времени ожидания, в течение которого служба пытается остановить задание, если оно еще не завершено.
Ограничения и другие рекомендации
При работе с API удаления заданий следует учитывать следующие рекомендации.
- Удаление заданий не является атомарными операциями. В случае сбоя, частичного завершения задания или времени ожидания задания нет отката.
- В экземпляре Azure Digital Twins поддерживается только одно массовое задание. Эти сведения и другие числовые ограничения API заданий можно просмотреть в ограничениях Azure Digital Twins.
Заметки об использовании и проверке подлинности
В этом разделе содержатся более подробные сведения об использовании API и пакетов SDK.
Заметки API
Ниже приведены общие сведения о вызове API Azure Digital Twins напрямую.
- Вы можете использовать средство тестирования REST HTTP для прямых вызовов API Azure Digital Twins. Дополнительные сведения об этом процессе см. в статье "Вызов API Azure Digital Twins".
- Azure Digital Twins сейчас не поддерживает Предоставление общего доступа к ресурсам независимо от источника (CORS). Дополнительные сведения о стратегиях влияния и разрешения см. в статье о совместном использовании ресурсов (CORS) для Azure Digital Twins.
Ниже приведены дополнительные сведения о проверке подлинности для запросов API.
- Одним из способов создания маркера носителя для запросов API Azure Digital Twins является команда az account get-access-token CLI. Подробные инструкции см. в разделе "Добавление маркера носителя".
- Для запросов к API Azure Digital Twins требуется пользователь или субъект-служба, который входит в тот же клиент Идентификатора Microsoft Entra, где существует экземпляр Azure Digital Twins. Чтобы предотвратить вредоносное сканирование конечных точек Azure Digital Twins, запросы с маркерами доступа за пределами исходного клиента возвращают сообщение об ошибке "404 Поддомен не найден". Эта ошибка возвращается, даже если пользователю или субъекту-службе предоставлена роль владельца данных Azure Digital Twins или средства чтения данных Azure Digital Twins через совместную работу Microsoft Entra B2B . Сведения о том, как обеспечить доступ для нескольких арендаторов, см. в статье Написание кода проверки подлинности приложения.
Заметки пакета SDK
Базовый пакет SDK для Azure Digital Twins .Azure.Core
См. документацию по пространству имен Azure для получения справки по инфраструктуре и типам пакетов SDK.
Ниже приведены дополнительные сведения о проверке подлинности с помощью пакетов SDK.
- Начните с создания экземпляра
DigitalTwinsClient
класса. Конструктору требуются учетные данные, которые можно получить с помощью различных методов проверки подлинности в пакетеAzure.Identity
. Дополнительные сведения оAzure.Identity
см. в документации по пространству имен. - Вы можете найти полезные
InteractiveBrowserCredential
при начале работы, но есть несколько других вариантов, включая учетные данные для управляемого удостоверения, которые могут быть полезны для проверки подлинности функций Azure, настроенных с помощью MSI для Azure Digital Twins. Дополнительные сведения оInteractiveBrowserCredential
см. в документации по классу.
Ниже приведены дополнительные сведения о функциях и возвращенных данных.
- Все вызовы API служб предоставляются как функции-члены класса
DigitalTwinsClient
. - Все функции службы существуют в синхронных и асинхронных версиях.
- Все функции службы создают исключение для любого возвращаемого состояния от 400 или выше. Убедитесь, что вызовы заносятся в раздел
try
, и собирайте по крайней мере исключенияRequestFailedExceptions
. Дополнительные сведения об этом типе исключения см. в справочной документации. - Большинство методов службы возвращают
Response<T>
(илиTask<Response<T>>
для асинхронных вызовов), гдеT
— это класс возвращаемого объекта для вызова службы. Класс Response инкапсулирует возвращаемые службой результаты и представляет возвращаемые значения в полеValue
. - Методы службы с результатами с разбивкой на страницы возвращают
Pageable<T>
илиAsyncPageable<T>
в качестве результатов. Дополнительные сведения о классеPageable<T>
см. в справочной документации. Дополнительные сведения оAsyncPageable<T>
см. в справочной документации. - Можно выполнять итерацию по результатам с разбивкой на страницы с помощью цикла
await foreach
. Дополнительные сведения об этом процессе см. в разделе "Итерирование с помощью асинхронных перечислений" в C# 8. - Методы службы возвращают строго типизированные объекты везде, где это возможно. Но так как служба Azure Digital Twins основана на моделях, настраиваемых пользователем во время выполнения (через модели DTDL, загруженные в службу), многие API службы принимают и возвращают данные двойника в формате JSON.
Вспомогательные средства сериализации в пакете SDK для .NET (C#)
Вспомогательные функции сериализации — это вспомогательные функции, доступные в пакете SDK для .NET (C#) для быстрого создания или десериализации данных двойника для доступа к базовым сведениям. Поскольку основные методы пакета SDK возвращают данные двойника в формате JSON по умолчанию, можно использовать эти вспомогательные классы для дальнейшего разбиения данных двойника.
Доступны следующие вспомогательные функции:
-
BasicDigitalTwin
: представляет основные данные цифрового двойника. -
BasicDigitalTwinComponent
: представляет компонент в свойствахContents
двойникаBasicDigitalTwin
. -
BasicRelationship
: представляет основные данные связи. -
DigitalTwinsJsonPropertyName
: содержит строковые константы для использования в сериализации и десериализации JSON для пользовательских типов цифровых двойников.
Мониторинг метрик API
Метрики API, такие как запросы, задержка и частота сбоев, можно просмотреть на портале Azure.
Сведения о просмотре метрик Azure Digital Twins и управлении ими см. в статье "Мониторинг экземпляра". Полный список метрик API, доступных для Azure Digital Twins, см. в разделе метрики запросов API Azure Digital Twins.
Следующие шаги
Узнайте, как выполнять прямые запросы к API Azure Digital Twins:
Или попробуйте использовать пакет SDK для .NET, создав клиентское приложение с помощью этого учебника: