SIATKA
GRID (Global Resource ID) to globalnie unikalny, stabilny identyfikator dowolnego bytu na platformie Altium – projektu, komponentu, BOM-u, zadania itd.
Dlaczego istnieją GRID-y
Byty platformy zazwyczaj mają lokalne identyfikatory (GUID-y, identyfikatory numeryczne), które są unikalne wyłącznie w swoim własnym kontekście. GUID projektu nie jest globalnie unikalny – dwa projekty w różnych Workspace’ach mogą mieć ten sam GUID. Identyfikator części dostawcy nie ma znaczenia poza systemem zaopatrzenia. To uniemożliwia jednoznaczne odwoływanie się do bytu w różnych usługach, zdarzeniach i integracjach.
GRID-y rozwiązują ten problem, kodując niezbędny kontekst bezpośrednio w identyfikatorze: obszar, tenant, bounded context, typ bytu i lokalny identyfikator są częścią GRID-u. Mając wyłącznie GRID, platforma może zlokalizować byt bez żadnego dodatkowego kontekstu.
Format
GRID-y są identyfikatorami URI używającymi grid jako schematu.
grid:area:[tenant-id]:context:resource-type/resource-id
GRID-y rozróżniają wielkość liter i składają się z dwóch głównych części:
-
Context path –
area:[tenant-id]:context– stała struktura używająca:jako separatora -
Resource path –
resource-type/resource-id– definiowana przez bounded context, z użyciem/jako separatora
Ścieżka zasobu obsługuje podzasoby: resource-type/id/sub-type/sub-id.
Składniki
Składnik |
Wymagany |
Opis |
|
Tak |
Szeroki domenowy obszar platformy – |
|
Nie |
Identyfikator tenanta (GUID Workspace dla zasobów Workspace). Pomijany dla zasobów, które nie należą do konkretnego tenanta |
|
Tak |
Bounded context – |
|
Tak |
Czytelna dla człowieka nazwa bytu z domenowego słownictwa |
|
Tak |
Lokalny identyfikator bytu |
Nazwy obszarów są zgodne z obszarami zakresów OAuth i celowo nie odnoszą się do produktów ani marek – w formacie GRID nie pojawiają się nazwy produktów. Dzięki temu GRID-y pozostają stabilne mimo rebrandingu produktów i zmian w firmie.
Dla zasobów globalnych (organizacje, użytkownicy, aplikacje) składnik tenant nie występuje – zwróć uwagę na podwójny dwukropek (::) w poniższych przykładach.
Przykłady
Global resources (bez tenanta):
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 jako tenant):
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 (bez tenanta – części nie należą do Workspace):
grid:supply::platform:part/43736907
Common Data Model (CDM) jest autorytatywnym źródłem odniesienia dla GRID-ów zdefiniowanych dla bytów platformy. Dokumentuje bounded contexts, typy bytów oraz ich strukturę GRID.
GRID-y w API
GRID-y pojawiają się w API Altium 365 jako pola id: ID! w bytach. API stosuje konwencję GraphQL Global Object Identification – mając GRID, platforma może bezpośrednio ponownie pobrać byt za pomocą zapytania node:
query {
node(id: "grid:workspace:d2e3a7b0-4eb4-4339-a3d6-20276ca4f7eb:design:adproject/a7ceb47c-db37-426a-a9ef-117d1146be35") {
... on DesProject {
name
description
}
}
}
Brama API wykorzystuje strukturę GRID do skierowania zapytania do właściwego subgrafu – od wywołującego nie jest potrzebny żaden dodatkowy kontekst.
GRID-y są stopniowo wdrażane w bytach API. Niektóre byty obecnie zwracają nieprzezroczyste identyfikatory węzłów zakodowane w base64 – to starszy format pochodzący z bazowego frameworka GraphQL. W miarę rozszerzania wdrożenia GRID-ów zostaną one zastąpione przez ustrukturyzowane GRID-y.