Azure Digital Twins-API:er och SDK:er
Den här artikeln ger en översikt över tillgängliga Azure Digital Twins-API:er och metoderna för att interagera med dem. Du kan antingen använda REST-API:erna direkt med deras associerade Swaggers eller via ett SDK.
Azure Digital Twins levereras med API:er för kontrollplan, API:er för dataplanet och SDK:er för att hantera din instans och dess element.
- API:er för kontrollplan är API:er för Azure Resource Manager (ARM) och omfattar resurshanteringsåtgärder som att skapa och ta bort din instans.
- API:erna för dataplanet är Azure Digital Twins-API:er och används för datahanteringsåtgärder som att hantera modeller, tvillingar och grafen.
- SDK:erna utnyttjar de befintliga API:erna för att underlätta utvecklingen av anpassade program som använder Azure Digital Twins.
API:er för kontrollplan
API:erna för kontrollplanet är ARM-API :er som används för att hantera din Azure Digital Twins-instans som helhet, så de omfattar åtgärder som att skapa eller ta bort hela instansen. Du använder också dessa API:er för att skapa och ta bort slutpunkter.
Om du vill anropa API:erna direkt refererar du till den senaste Swagger-mappen i kontrollplanets Swagger-lagringsplats. Den här mappen innehåller också en mapp med exempel som visar användningen.
Här är de SDK:er som för närvarande är tillgängliga för Api:erna för Azure Digital Twins-kontrollplanet.
Du kan också använda API:er för kontrollplanet genom att interagera med Azure Digital Twins via Azure-portalen och CLI.
API:er för dataplan
Api:erna för dataplanet är De Azure Digital Twins-API:er som används för att hantera elementen i din Azure Digital Twins-instans. De omfattar åtgärder som att skapa vägar, ladda upp modeller, skapa relationer och hantera tvillingar och kan delas in i följande kategorier:
DigitalTwinModels
– Kategorin DigitalTwinModels innehåller API:er för att hantera modellerna i en Azure Digital Twins-instans. Hanteringsaktiviteter omfattar uppladdning, validering, hämtning och borttagning av modeller som skapats i DTDL.DigitalTwins
– Kategorin DigitalTwins innehåller API:er som gör att utvecklare kan skapa, ändra och ta bort digitala tvillingar och deras relationer i en Azure Digital Twins-instans.Query
– Med kategorin Fråga kan utvecklare hitta uppsättningar med digitala tvillingar i tvillingdiagrammet mellan relationer.Event Routes
– Kategorin Händelsevägar innehåller API:er för att dirigera data, genom systemet och till underordnade tjänster.Import Jobs
– Med API:et Importera jobb kan du hantera en tidskrävande, asynkron åtgärd för att importera modeller, tvillingar och relationer i bulk.Delete Jobs
– Med API:et Ta bort jobb kan du hantera en tidskrävande, asynkron åtgärd för att ta bort alla modeller, tvillingar och relationer i en instans.
Om du vill anropa API:erna direkt refererar du till den senaste Swagger-mappen i dataplanets Swagger-lagringsplats. Den här mappen innehåller också en mapp med exempel som visar användningen. Du kan också visa referensdokumentationen för dataplanets API.
Här är de SDK:er som för närvarande är tillgängliga för Api:er för Azure Digital Twins-dataplanet.
Du kan också använda API:er för dataplanet genom att interagera med Azure Digital Twins via CLI.
Anteckningar om användning och autentisering
Det här avsnittet innehåller mer detaljerad information om hur du använder API:er och SDK:er.
API-anteckningar
Här är lite allmän information för att anropa Azure Digital Twins-API:erna direkt.
- Du kan använda ett HTTP REST-testverktyg för att göra direkta anrop till Azure Digital Twins-API:erna. Mer information om den här processen finns i Anropa Azure Digital Twins-API:er.
- Azure Digital Twins har för närvarande inte stöd för resursdelning mellan ursprung (CORS). Mer information om effekt- och lösningsstrategier finns i Resursdelning mellan ursprung (CORS) för Azure Digital Twins.
Här är lite mer information om autentisering för API-begäranden.
- Ett sätt att generera en ägartoken för Azure Digital Twins API-begäranden är med CLI-kommandot az account get-access-token . Detaljerade instruktioner finns i Lägga till ägartoken.
- Begäranden till Azure Digital Twins-API:erna kräver en användare eller tjänstens huvudnamn som ingår i samma Microsoft Entra-ID-klientorganisation där Azure Digital Twins-instansen finns. För att förhindra skadlig genomsökning av Azure Digital Twins-slutpunkter returneras felmeddelandet "404 underdomän hittades inte" om begäranden med åtkomsttoken utanför den ursprungliga klientorganisationen. Det här felet returneras även om användaren eller tjänstens huvudnamn fick rollen Azure Digital Twins Data Owner eller Azure Digital Twins Data Reader via Microsoft Entra B2B-samarbete . Information om hur du uppnår åtkomst mellan flera klienter finns i Skriva kod för appautentisering.
SDK-anteckningar
Den underliggande SDK:t för Azure Digital Twins är Azure.Core
. Mer information om SDK-infrastrukturen och -typerna finns i dokumentationen för Azure-namnområdet.
Här är lite mer information om autentisering med SDK:erna.
- Börja med att instansiera
DigitalTwinsClient
klassen. Konstruktorn kräver autentiseringsuppgifter som kan hämtas med olika typer av autentiseringsmetoder iAzure.Identity
paketet. Mer information finnsAzure.Identity
i dokumentationen om namnområdet. - Det kan vara användbart när du kommer igång, men det finns flera andra alternativ, inklusive autentiseringsuppgifter för hanterad identitet, som du förmodligen använder för att autentisera
InteractiveBrowserCredential
Azure-funktioner som konfigurerats med MSI mot Azure Digital Twins. Mer information omInteractiveBrowserCredential
finns i dess klassdokumentation.
Här är lite mer information om funktioner och returnerade data.
- Alla tjänst-API-anrop exponeras som medlemsfunktioner i
DigitalTwinsClient
klassen. - Alla tjänstfunktioner finns i synkrona och asynkrona versioner.
- Alla tjänstfunktioner utlöser ett undantag för returstatusen 400 eller senare. Se till att omsluta anrop till ett
try
avsnitt och fånga minstRequestFailedExceptions
. Mer information om den här typen av undantag finns i referensdokumentationen. - De flesta tjänstmetoder returnerar
Response<T>
eller (Task<Response<T>>
för asynkrona anrop), därT
är klassen för returobjektet för tjänstanropet. Klassen Response kapslar in tjänstreturen och visar returvärden i fältetValue
. - Tjänstmetoder med sidiga resultat returnerar
Pageable<T>
ellerAsyncPageable<T>
som resultat. Mer information om klassen finns i referensdokumentationen. Mer information omAsyncPageable<T>
finns i referensdokumentationenPageable<T>
. - Du kan iterera över sidiga resultat med hjälp av en
await foreach
loop. Mer information om den här processen finns i Iterera med Async Enumerables i C# 8. - Tjänstmetoder returnerar starkt typerade objekt där det är möjligt. Men eftersom Azure Digital Twins baseras på modeller som har konfigurerats av användaren vid körning (via DTDL-modeller som laddats upp till tjänsten) tar många tjänst-API:er och returnerar tvillingdata i JSON-format.
Serialiseringshjälpare i .NET (C#) SDK
Serialiseringshjälpare är hjälpfunktioner som är tillgängliga i .NET (C#) SDK för att snabbt skapa eller deserialisera tvillingdata för åtkomst till grundläggande information. Eftersom SDK-kärnmetoderna returnerar tvillingdata som JSON som standard kan det vara bra att använda dessa hjälpklasser för att dela upp tvillingdata ytterligare.
De tillgängliga hjälpklasserna är:
BasicDigitalTwin
: Representerar generellt kärndata för en digital tvillingBasicDigitalTwinComponent
: Representerar allmänt en komponent i egenskaperna förContents
enBasicDigitalTwin
BasicRelationship
: Representerar generellt kärndata för en relationDigitalTwinsJsonPropertyName
: Innehåller strängkonstanterna för användning i JSON-serialisering och deserialisering för anpassade typer av digitala tvillingar
Massimport med API:et Importera jobb
API för importjobb är ett API för dataplan som gör att du kan importera en uppsättning modeller, tvillingar och/eller relationer i ett enda API-anrop. API-åtgärder för importjobb ingår också i CLI-kommandona och SDK:erna för dataplanet. Användning av API för importjobb kräver användning av Azure Blob Storage.
Kontrollera behörigheter
Om du vill använda API:et Importera jobb måste du aktivera behörighetsinställningarna som beskrivs i det här avsnittet.
Först behöver du en systemtilldelad hanterad identitet för din Azure Digital Twins-instans. Anvisningar för hur du konfigurerar en systemhanterad identitet för instansen finns i Aktivera/inaktivera hanterad identitet för instansen.
Du måste ha skrivbehörigheter i din Azure Digital Twins-instans för följande kategorier av dataåtgärder:
Microsoft.DigitalTwins/jobs/*
- Alla grafelement som du vill inkludera i jobbanropet. Detta kan inkludera
Microsoft.DigitalTwins/models/*
,Microsoft.DigitalTwins/digitaltwins/*
och/ellerMicrosoft.DigitalTwins/digitaltwins/relationships/*
.
Den inbyggda rollen som ger alla dessa behörigheter är Azure Digital Twins Data Owner. Du kan också använda en anpassad roll för att ge detaljerad åtkomst till endast de datatyper som du behöver. Mer information om roller i Azure Digital Twins finns i Säkerhet för Azure Digital Twins-lösningar.
Kommentar
Om du försöker köra ett API-anrop för importjobb och du saknar skrivbehörighet till någon av de diagramelementtyper som du försöker importera hoppar jobbet över den typen och importerar de andra. Om du till exempel har skrivåtkomst till modeller och tvillingar, men inte relationer, kommer ett försök att massimportera alla tre typerna av element bara att lyckas importera modellerna och tvillingarna. Jobbstatusen återspeglar ett fel och meddelandet anger vilka behörigheter som saknas.
Du måste också bevilja följande RBAC-behörigheter till den systemtilldelade hanterade identiteten för din Azure Digital Twins-instans så att den kan komma åt indata- och utdatafiler i Azure Blob Storage-containern:
- Storage Blob Data Reader för Azure Storage-indatablobcontainern
- Storage Blob Data-deltagare för Azure Storage-utdatablobcontainern
Generera slutligen en ägartoken som kan användas i dina begäranden till jobb-API:et. Instruktioner finns i Lägga till ägartoken.
Formatera data
API:et accepterar diagraminformationsindata från en NDJSON-fil , som måste laddas upp till en Azure Blob Storage-container . Filen börjar med ett Header
avsnitt följt av de valfria avsnitten Models
, Twins
och Relationships
. Du behöver inte inkludera alla tre typerna av grafdata i filen, men alla avsnitt som finns måste följa den ordningen. Tvillingar och relationer som skapats med det här API:et kan också inkludera initiering av deras egenskaper.
Här är en exempelindatafil för import-API:et:
{"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}
Dricks
Ett exempelprojekt som konverterar modeller, tvillingar och relationer till NDJSON som stöds av import-API:et finns i Azure Digital Twins Bulk Import NDJSON Generator. Exempelprojektet är skrivet för .NET och kan laddas ned eller anpassas för att hjälpa dig att skapa egna importfiler.
När filen har skapats laddar du upp den till en blockblob i Azure Blob Storage med den uppladdningsmetod du föredrar (vissa alternativ är Kommandot AzCopy, Azure CLI eller Azure-portalen). Du använder bloblagrings-URL:en för NDJSON-filen i brödtexten i API-anropet Importera jobb.
Kör importjobbet
Nu kan du fortsätta med att anropa API:et För importjobb. Detaljerade anvisningar om hur du importerar ett fullständigt diagram i ett API-anrop finns i Ladda upp modeller, tvillingar och relationer i bulk med API:et Importera jobb. Du kan också använda API:et Importera jobb för att importera varje resurstyp oberoende av varandra. Mer information om hur du använder API:et Importera jobb med enskilda resurstyper finns i Importera api-instruktioner för jobb för modeller, tvillingar och relationer.
I api-anropets brödtext anger du bloblagrings-URL:en för NDJSON-indatafilen. Du anger också en ny bloblagrings-URL som anger var du vill att utdataloggen ska lagras när tjänsten skapar den.
Viktigt!
Kontrollera att den systemtilldelade hanterade identiteten för din Azure Digital Twins-instans har de RBAC-behörigheter för lagringsblob som beskrivs i avsnittet Kontrollera behörigheter.
När importjobbet körs genereras en strukturerad utdatalogg av tjänsten och lagras som en ny tilläggsblob i blobcontainern på den URL-plats som du angav för utdatabloben i begäran. Här är ett exempel på utdataloggen för ett lyckat jobb med att importera modeller, tvillingar och relationer:
{"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"}}
När jobbet är klart kan du se det totala antalet inmatade entiteter med måttet BulkOperationEntityCount.
Det går också att avbryta ett importjobb som körs med åtgärden Avbryt från API:et Importera jobb. När jobbet har avbrutits och inte längre körs kan du ta bort det.
Begränsningar och överväganden
Tänk på följande när du arbetar med API:et importera jobb:
- Importjobb är inte atomiska åtgärder. Det finns ingen återställning vid fel, partiellt slutförande av jobb eller användning av åtgärden Avbryt.
- Endast ett massjobb stöds i taget i en Azure Digital Twins-instans. Du kan visa den här informationen och andra numeriska gränser för jobb-API:erna i Azure Digital Twins-gränser.
Massborttagning med API:et Ta bort jobb
API:et Ta bort jobb är ett API för dataplan som gör att du kan ta bort alla modeller, tvillingar och relationer i en instans med ett enda API-anrop. API-åtgärder för att ta bort jobb är också tillgängliga som CLI-kommandon. Gå till API-dokumentationen för att se information om begäran för att skapa ett borttagningsjobb och kontrollera dess status.
Följ dessa rekommendationer när du använder API:et Ta bort jobb för att se till att alla element tas bort:
- Anvisningar om hur du genererar en ägartoken för att autentisera API-begäranden finns i Lägga till ägartoken.
- Om du nyligen har importerat ett stort antal entiteter till diagrammet väntar du en stund och kontrollerar att alla element synkroniseras i diagrammet innan du påbörjar borttagningsjobbet.
- Stoppa alla åtgärder på instansen, särskilt uppladdningsåtgärder, tills borttagningsjobbet har slutförts.
Beroende på storleken på diagrammet som tas bort kan ett borttagningsjobb ta allt från några minuter till flera timmar.
Standardtidsgränsen för ett borttagningsjobb är 12 timmar, vilket kan justeras till valfritt värde mellan 15 minuter och 24 timmar med hjälp av en frågeparameter i API:et. Det här är den tid som borttagningsjobbet körs innan tidsgränsen uppnås, då tjänsten försöker stoppa jobbet om det inte har slutförts ännu.
Begränsningar och andra överväganden
Tänk på följande när du arbetar med API:et Ta bort jobb:
- Ta bort jobb är inte atomiska åtgärder. Det finns ingen återställning vid fel, delvis slutförande av jobb eller tidsgräns för jobbet.
- Endast ett massjobb stöds i taget i en Azure Digital Twins-instans. Du kan visa den här informationen och andra numeriska gränser för jobb-API:erna i Azure Digital Twins-gränser.
Övervaka API-mått
API-mått som begäranden, svarstid och felfrekvens kan visas i Azure-portalen.
Information om hur du visar och hanterar Azure Digital Twins-mått finns i Övervaka din instans. En fullständig lista över API-mått som är tillgängliga för Azure Digital Twins finns i Azure Digital Twins API-mått för begäran.
Nästa steg
Se hur du gör direkta begäranden till Azure Digital Twins-API:erna:
Eller öva på att använda .NET SDK genom att skapa en klientapp med den här självstudien: