СЕТКА
A GRID (глобальный идентификатор ресурса, Global Resource ID) — это глобально уникальный, стабильный идентификатор любой сущности на платформе Altium: проекта, компонента, BOM, задачи и т. д.
Зачем нужны GRID
Сущности платформы обычно имеют локальные идентификаторы (GUID, числовые ID), которые уникальны только в пределах своего собственного контекста. GUID проекта не является глобально уникальным — два проекта в разных Workspace могут иметь один и тот же GUID. ID позиции поставки не имеет смысла вне системы поставок. Из-за этого невозможно однозначно ссылаться на сущность между сервисами, событиями и интеграциями.
GRID решают эту проблему, кодируя необходимый контекст непосредственно в идентификаторе: область, тенант, ограниченный контекст, тип сущности и локальный ID — все это является частью GRID. Имея только GRID, платформа может найти сущность без какого-либо дополнительного контекста.
Формат
GRID представляют собой URI, использующие grid в качестве схемы.
grid:area:[tenant-id]:context:resource-type/resource-id
GRID чувствительны к регистру и состоят из двух основных частей:
-
Context path –
area:[tenant-id]:context– фиксированная структура с использованием:в качестве разделителя -
Resource path –
resource-type/resource-id– определяется ограниченным контекстом с использованием/в качестве разделителя
Путь ресурса поддерживает подресурсы: resource-type/id/sub-type/sub-id.
Компоненты
Компонент |
Обязательно |
Описание |
|
Да |
Широкая доменная область платформы — |
|
Нет |
ID тенанта (GUID Workspace для ресурсов Workspace). Опускается для ресурсов, не принадлежащих конкретному тенанту |
|
Да |
Ограниченный контекст — |
|
Да |
Понятное человеку имя сущности из словаря домена |
|
Да |
Локальный идентификатор сущности |
Имена областей согласованы с областями OAuth scope и намеренно не привязаны к продуктам и брендам — в формате GRID не используются названия продуктов. Это делает GRID стабильными при ребрендинге продуктов и изменениях в компании.
Для глобальных ресурсов (организаций, пользователей, приложений) компонент тенанта отсутствует — обратите внимание на двойное двоеточие (::) в примерах ниже.
Примеры
Global resources (без тенанта):
grid:global::platform:organization/837af973-180e-45ab-a93a-62a66f44d75a
grid:global::platform:user/837af973-180e-45ab-a93a-62a66f44d75a
grid:global::events:subscription/41428e10-d66a-4b27-8bbf-3a51496cceae
Workspace resources (GUID Workspace в качестве тенанта):
grid:workspace:d2e3a7b0-4eb4-4339-a3d6-20276ca4f7eb:design:project/DA051CB4-13C4-41A7-A795-2A5EBC2B9A9B
grid:workspace:d2e3a7b0-4eb4-4339-a3d6-20276ca4f7eb:library:component/0F629FA7-A5C5-4034-829A-83CC5E95B947
grid:workspace:d2e3a7b0-4eb4-4339-a3d6-20276ca4f7eb:procurement:bom/BD74926A-7AFA-454E-8879-C79E8C8685EE
grid:workspace:d2e3a7b0-4eb4-4339-a3d6-20276ca4f7eb:collaboration:task/BCC891F1-49C3-46B2-9A03-85F882133050
Supply resources (без тенанта — части не принадлежат Workspace):
grid:supply::platform:part/43736907
Common Data Model (CDM) — это авторитетный справочный источник по GRID, определенным для сущностей платформы. В нем документированы ограниченные контексты, типы сущностей и их структура GRID.
GRID в API
GRID представлены в Altium 365 API как поля id: ID! у сущностей. API следует соглашению GraphQL Global Object Identification — имея GRID, платформа может напрямую повторно получить сущность с помощью запроса node:
query {
node(id: "grid:workspace:d2e3a7b0-4eb4-4339-a3d6-20276ca4f7eb:design:adproject/a7ceb47c-db37-426a-a9ef-117d1146be35") {
... on DesProject {
name
description
}
}
}
API gateway использует структуру GRID, чтобы направить запрос в правильный подграф — от вызывающей стороны не требуется никакой дополнительный контекст.
GRID постепенно внедряются во все сущности API. Некоторые сущности в настоящее время возвращают непрозрачные base64-кодированные node ID — это устаревший формат базового GraphQL-фреймворка. По мере расширения использования GRID они будут заменены структурированными GRID.