Dodawanie obiektów blob do obiektów w usłudze Azure Digital Twins
Ważne
Udostępniono nową wersję usługi Azure Digital Twins. W świetle rozszerzonych możliwości nowej usługi oryginalna usługa Azure Digital Twins (opisana w tym zestawie dokumentacji) została wycofana.
Aby wyświetlić dokumentację nowej usługi, odwiedź aktywną dokumentację usługi Azure Digital Twins.
Obiekty blob to nieustrukturyzowane reprezentacje typowych typów plików, takich jak obrazy i dzienniki. Obiekty blob śledzą, jakiego rodzaju dane reprezentują przy użyciu typu MIME (na przykład "image/jpeg") i metadanych (nazwa, opis, typ itd.).
Usługa Azure Digital Twins obsługuje dołączanie obiektów blob do urządzeń, przestrzeni i użytkowników. Obiekty blob mogą reprezentować obraz profilu użytkownika, zdjęcie urządzenia, wideo, mapę, plik zip oprogramowania układowego, dane JSON, dziennik itp.
W tym artykule przyjęto założenie, że znajomość uwierzytelniania w interfejsach API zarządzania usługą Azure Digital Twins.
- Aby dowiedzieć się więcej na temat uwierzytelniania za pomocą interfejsów API zarządzania, przeczytaj Artykuł Authenticating with Azure Digital Twins APIs (Uwierzytelnianie za pomocą interfejsów API usługi Azure Digital Twins).
- Aby uwierzytelnić się przy użyciu interfejsów API zarządzania przy użyciu klienta REST narzędzia Postman, przeczytaj Artykuł Jak skonfigurować narzędzie Postman.
Omówienie przekazywania obiektów blob
Żądania wieloczęściowe umożliwiają przekazywanie obiektów blob do określonych punktów końcowych i ich odpowiednich funkcji.
Uwaga
Żądania wieloczęściowe zwykle wymagają trzech elementów:
- Nagłówek Content-Type:
application/json; charset=utf-8
multipart/form-data; boundary="USER_DEFINED_BOUNDARY"
- Dyspozycja zawartości:
form-data; name="metadata"
- Zawartość pliku do przekazania
Typ zawartości i dyspozycja zawartości będą się różnić w zależności od scenariusza użycia.
Żądania wieloczęściowe można wykonywać programowo (za pośrednictwem języka C#), za pośrednictwem klienta REST lub narzędzia, takiego jak Postman. Narzędzia klienckie REST mogą mieć różne poziomy obsługi złożonych żądań wieloczęściowych. Ustawienia konfiguracji mogą się również nieznacznie różnić od narzędzia do narzędzia. Sprawdź, które narzędzie najlepiej odpowiada Twoim potrzebom.
Ważne
Żądania wieloczęściowe wysyłane do interfejsów API zarządzania usługą Azure Digital Twins zwykle mają dwie części:
- Metadane obiektów blob (takie jak skojarzony typ MIME) zadeklarowane przez typ zawartości i/lub content-disposition
- Zawartość obiektu blob, która zawiera nieustrukturyzowaną zawartość pliku do przekazania
Żadna z dwóch części nie jest wymagana w przypadku żądań PATCH . Oba są wymagane w przypadku operacji POST lub tworzenia.
Kod źródłowy Przewodnika Szybki start zajętości zawiera kompletne przykłady języka C#, które pokazują, jak wykonywać żądania wieloczęściowe względem interfejsów API zarządzania usługą Azure Digital Twins.
Metadane obiektu blob
Oprócz typu zawartości i dyspozycji zawartości żądania wieloczęściowe obiektów blob usługi Azure Digital Twins muszą określać poprawną treść JSON. Treść JSON do przesłania zależy od rodzaju wykonywanej operacji żądania HTTP.
Cztery główne schematy JSON to:
Metadane obiektu blob JSON są zgodne z następującym modelem:
{
"parentId": "00000000-0000-0000-0000-000000000000",
"name": "My First Blob",
"type": "Map",
"subtype": "GenericMap",
"description": "A well chosen description",
"sharing": "None"
}
Atrybut | Type | Opis |
---|---|---|
parentId | String | Jednostka nadrzędna do skojarzenia obiektu blob z (spacjami, urządzeniami lub użytkownikami) |
name | String | Przyjazna dla człowieka nazwa obiektu blob |
type | String | Typ obiektu blob — nie może używać typu i typeId |
typeId | Integer | Identyfikator typu obiektu blob — nie można użyć typu i identyfikatora typeId |
Podtypu | String | Podtyp obiektu blob — nie można użyć podtypu i podtypuId |
subtypeId | Integer | Identyfikator podtypu obiektu blob — nie można użyć podtypu i podtypuId |
opis | String | Dostosowany opis obiektu blob |
Udostępnianie | String | Czy obiekt blob może być współużytkowany — wyliczenie [None , Tree , Global ] |
Metadane obiektu blob są zawsze dostarczane jako pierwszy fragment z typem application/json
zawartości lub plikiem .json
. Dane pliku są dostarczane w drugim fragmentie i mogą być dowolnym obsługiwanym typem MIME.
W dokumentacji struktury Swagger szczegółowo opisano te schematy modelu.
Napiwek
Dostępna jest wersja zapoznawcza programu Swagger w celu zademonstrowania zestawu funkcji interfejsu API. Jest on hostowany w docs.westcentralus.azuresmartspaces.net/management/swagger.
Dostęp do własnej dokumentacji wygenerowanego interfejsu API zarządzania programu Swagger można uzyskać pod adresem:
https://YOUR_INSTANCE_NAME.YOUR_LOCATION.azuresmartspaces.net/management/swagger
Nazwisko | Replace with |
---|---|
YOUR_INSTANCE_NAME | Nazwa wystąpienia usługi Azure Digital Twins |
YOUR_LOCATION | Region serwera, w którym jest hostowane używane wystąpienie |
Dowiedz się więcej na temat korzystania z dokumentacji referencyjnej, czytając artykuł How to use Swagger (Jak używać struktury Swagger).
Dane odpowiedzi obiektów blob
Indywidualnie zwracane obiekty blob są zgodne z następującym schematem JSON:
{
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parentId": "00000000-0000-0000-0000-000000000000",
"type": "string",
"subtype": "string",
"typeId": 0,
"subtypeId": 0,
"sharing": "None",
"description": "string",
"contentInfos": [
{
"type": "string",
"sizeBytes": 0,
"mD5": "string",
"version": "string",
"lastModifiedUtc": "2019-01-12T00:58:08.689Z",
"metadata": {
"additionalProp1": "string",
"additionalProp2": "string",
"additionalProp3": "string"
}
}
],
"fullName": "string",
"spacePaths": [
"string"
]
}
Atrybut | Type | Opis |
---|---|---|
id | String | Unikatowy identyfikator obiektu blob |
name | String | Przyjazna dla człowieka nazwa obiektu blob |
parentId | String | Jednostka nadrzędna do skojarzenia obiektu blob z (spacjami, urządzeniami lub użytkownikami) |
type | String | Typ obiektu blob — nie może używać typu i typeId |
typeId | Integer | Identyfikator typu obiektu blob — nie można użyć typu i identyfikatora typeId |
Podtypu | String | Podtyp obiektu blob — nie można użyć podtypu i podtypuId |
subtypeId | Integer | Identyfikator podtypu obiektu blob — nie można użyć podtypu i podtypuId |
Udostępnianie | String | Czy obiekt blob może być współużytkowany — wyliczenie [None , Tree , Global ] |
opis | String | Dostosowany opis obiektu blob |
contentInfos | Tablica | Określa informacje o metadanych bez struktury, w tym informacje o wersji |
fullName | String | Pełna nazwa obiektu blob |
spacePaths | String | Ścieżka spacji |
Metadane obiektu blob są zawsze dostarczane jako pierwszy fragment z typem application/json
zawartości lub plikiem .json
. Dane pliku są dostarczane w drugim fragmentie i mogą być dowolnym obsługiwanym typem MIME.
Przykłady żądań wieloczęściowych obiektów blob
W poniższych YOUR_MANAGEMENT_API_URL
przykładach odwołuje się do identyfikatora URI interfejsów API usługi Digital Twins:
https://YOUR_INSTANCE_NAME.YOUR_LOCATION.azuresmartspaces.net/management/api/v1.0
Nazwisko | Replace with |
---|---|
YOUR_INSTANCE_NAME | Nazwa wystąpienia usługi Azure Digital Twins |
YOUR_LOCATION | Region, w którym jest hostowane twoje wystąpienie |
Aby przekazać plik tekstowy jako obiekt blob i skojarzyć go z spacją, wykonaj uwierzytelnione żądanie HTTP POST do:
YOUR_MANAGEMENT_API_URL/spaces/blobs
Z następującą treścią:
--USER_DEFINED_BOUNDARY
Content-Type: application/json; charset=utf-8
Content-Disposition: form-data; name="metadata"
{
"ParentId": "54213cf5-285f-e611-80c3-000d3a320e1e",
"Name": "My First Blob",
"Type": "Map",
"SubType": "GenericMap",
"Description": "A well chosen description",
"Sharing": "None"
}
--USER_DEFINED_BOUNDARY
Content-Disposition: form-data; name="contents"; filename="myblob.txt"
Content-Type: text/plain
This is my blob content. In this case, some text, but I could also be uploading a picture, an JSON file, a firmware zip, etc.
--USER_DEFINED_BOUNDARY--
Wartość | Replace with |
---|---|
USER_DEFINED_BOUNDARY | Nazwa granicy zawartości wieloczęściowej |
Poniższy kod to implementacja platformy .NET tego samego przekazywania obiektów blob przy użyciu klasy MultipartFormDataContent:
//Supply your metadata in a suitable format
var multipartContent = new MultipartFormDataContent("USER_DEFINED_BOUNDARY");
var metadataContent = new StringContent(JsonConvert.SerializeObject(metaData), Encoding.UTF8, "application/json");
metadataContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json; charset=utf-8");
multipartContent.Add(metadataContent, "metadata");
//MY_BLOB.txt is the String representation of your text file
var fileContents = new StringContent("MY_BLOB.txt");
fileContents.Headers.ContentType = MediaTypeHeaderValue.Parse("text/plain");
multipartContent.Add(fileContents, "contents");
var response = await httpClient.PostAsync("spaces/blobs", multipartContent);
Ponadto użytkownicy biblioteki cURL mogą wysyłać żądania formularzy wieloczęściowych w ten sam sposób:
curl -X POST "YOUR_MANAGEMENT_API_URL/spaces/blobs" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: multipart/form-data" \
-F "meta={\"ParentId\":\"YOUR_SPACE_ID\",\"Name\":\"My CURL Blob\",\"Type\":\"Map\",\"SubType\":\"GenericMap\",\"Description\":\"A well chosen description\",\"Sharing\":\"None\"};type=application/json" \
-F "text=PATH_TO_FILE;type=text/plain"
Wartość | Replace with |
---|---|
YOUR_TOKEN | Prawidłowy token protokołu OAuth 2.0 |
YOUR_SPACE_ID | Identyfikator miejsca do skojarzenia obiektu blob z |
PATH_TO_FILE | Ścieżka do pliku tekstowego |
Pomyślny post zwraca identyfikator nowego obiektu blob.
Punkty końcowe interfejsu API
W poniższych sekcjach opisano podstawowe punkty końcowe interfejsu API związane z obiektami blob i ich funkcje.
Urządzenia
Obiekty blob można dołączać do urządzeń. Na poniższej ilustracji przedstawiono dokumentację referencyjną struktury Swagger dla interfejsów API zarządzania. Określa on punkty końcowe interfejsu API związane z urządzeniem dla użycia obiektów blob i wszystkie wymagane parametry ścieżki, które mają być do nich przekazywane.
Na przykład aby zaktualizować lub utworzyć obiekt blob i dołączyć obiekt blob do urządzenia, wykonaj uwierzytelnione żądanie HTTP PATCH do:
YOUR_MANAGEMENT_API_URL/devices/blobs/YOUR_BLOB_ID
Parametr | Replace with |
---|---|
YOUR_BLOB_ID | Żądany identyfikator obiektu blob |
Żądania zakończone powodzeniem zwracają obiekt JSON zgodnie z wcześniejszym opisem.
spacje,
Można również dołączać obiekty blob do spacji. Na poniższej ilustracji wymieniono wszystkie punkty końcowe interfejsu API przestrzeni odpowiedzialne za obsługę obiektów blob. Zawiera również listę wszystkich parametrów ścieżki, które mają być przekazywane do tych punktów końcowych.
Aby na przykład zwrócić obiekt blob dołączony do miejsca, wykonaj uwierzytelnione żądanie HTTP GET do:
YOUR_MANAGEMENT_API_URL/spaces/blobs/YOUR_BLOB_ID
Parametr | Replace with |
---|---|
YOUR_BLOB_ID | Żądany identyfikator obiektu blob |
Żądania zakończone powodzeniem zwracają obiekt JSON zgodnie z wcześniejszym opisem.
Żądanie PATCH do tego samego punktu końcowego aktualizuje opisy metadanych i tworzy wersje obiektu blob. Żądanie HTTP jest wykonywane za pośrednictwem metody PATCH wraz z dowolnymi wymaganymi metadanymi i danymi formularzy wieloczęściowych.
Użytkownicy
Obiekty blob można dołączać do modeli użytkowników (na przykład w celu skojarzenia obrazu profilu). Na poniższej ilustracji przedstawiono odpowiednie punkty końcowe interfejsu API użytkownika i wszystkie wymagane parametry ścieżki, takie jak id
:
Aby na przykład pobrać obiekt blob dołączony do użytkownika, wykonaj uwierzytelnione żądanie HTTP GET z dowolnymi wymaganymi danymi formularza do:
YOUR_MANAGEMENT_API_URL/users/blobs/YOUR_BLOB_ID
Parametr | Replace with |
---|---|
YOUR_BLOB_ID | Żądany identyfikator obiektu blob |
Żądania zakończone powodzeniem zwracają obiekt JSON zgodnie z wcześniejszym opisem.
Typowe błędy
Typowy błąd polega na braku podawania poprawnych informacji nagłówka:
{ "error": { "code": "400.600.000.000", "message": "Invalid media type in first section." } }
Aby rozwiązać ten błąd, sprawdź, czy ogólne żądanie ma odpowiedni nagłówek Content-Type :
multipart/mixed
multipart/form-data
Sprawdź również, czy każdy fragment wieloczęściowy ma odpowiedni typ zawartości.
Drugi typowy błąd występuje, gdy wiele obiektów blob jest przypisanych do tego samego zasobu na wykresie analizy przestrzennej:
{ "error": { "code": "400.600.000.000", "message": "SpaceBlobMetadata already exists." } }
Uwaga
Atrybut komunikatu będzie się różnić w zależności od zasobu.
Do każdego zasobu w grafie przestrzennym może być dołączony tylko jeden obiekt blob (każdego rodzaju).
Aby rozwiązać ten błąd, zaktualizuj istniejący obiekt blob przy użyciu odpowiedniej operacji HTTP PATCH interfejsu API. Spowoduje to zastąpienie istniejących danych obiektów blob żądanymi danymi.
Następne kroki
Aby dowiedzieć się więcej na temat dokumentacji referencyjnej struktury Swagger dla usługi Azure Digital Twins, przeczytaj Artykuł Use Azure Digital Twins Swagger (Używanie struktury Swagger usługi Azure Digital Twins).
Aby przekazać obiekty blob za pośrednictwem narzędzia Postman, przeczytaj jak skonfigurować narzędzie Postman.