Asset di dati (API REST di Azure Data Catalog)
Annota
Annota un asset.
etag
la proprietà è facoltativa e viene usata per il controllo della concorrenza.
POST https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}/{view_item_id}/{nested_view_name}?api-version={api-version}
Nota
Alcune implementazioni client HTTP possono inviare automaticamente richieste in risposta a 302 dal server, ma in genere rimuovere le intestazioni di autorizzazione dalla richiesta. Poiché l'intestazione Authorization è necessaria per effettuare richieste ad ADC, è necessario assicurarsi che l'intestazione authorization sia ancora specificata quando si esegue di nuovo una richiesta a un percorso di reindirizzamento specificato da ADC. Di seguito è riportato il codice di esempio che illustra questa operazione usando l'oggetto .NET HttpWebRequest.
Parametri dell'URI
Nome | Descrizione | Tipo di dati |
---|---|---|
catalog_name | Nome del catalogo o "DefaultCatalog" per usare il catalogo predefinito. | string |
view_name | Nome della visualizzazione asset di dati. | string |
view_item_id | ID di un elemento di visualizzazione. | string |
nested_view_name | Nome di un elemento Di visualizzazione annidato. | string |
api-version | La versione delle API. | string |
Esempio: Aggiungere esperti
POST https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0...1be45ecd462a/experts?api-version=2016-03-30
Intestazione
Content-Type: application/json
x-ms-client-request-id: 13d9f885…a92d-8a9f8cf9f707
Authorization: Bearer eyJ0eX ... FWSXfwtQ
Corpo
{
"etag": "59085E253E2244A59F664A2F447E675E",
"properties":
{
"fromSourceSystem": false,
"key": "22c3fa019b3945dc97143ebc3ad74cbf--1111fa019b3945dc97143ebc3ad74cbf",
"expert":
{
"upn": "expert1@contoso.com",
"objectId": "1111fa019b3945dc97143ebc3ad74cbf"
},
}
}
Esempio: Aggiungere tag di termini di glossario
POST https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0...1be45ecd462a/termTags?api-version=2016-03-30
Intestazione
Content-Type: application/json
x-ms-client-request-id: 13d9f885…a92d-8a9f8cf9f707
Authorization: Bearer eyJ0eX ... FWSXfwtQ
Corpo
{
"etag": "59085E253E2244A59F664A2F447E675E",
"properties":
{
"fromSourceSystem": false,
"key": "22c3fa019b3945dc97143ebc3ad74cbf--1111fa019b3945dc97143ebc3ad74cbf",
"termId": "https://test.catalog.com/catalogs/DefaultCatalog/glossaries/DefaultGlossary/terms/ed975c9d-2fb2-49a3-b6f2-222389cefd7e",
}
}
Esempio: Aggiungere tag termini colonna glossario
POST https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0...1be45ecd462a/columnTermTags?api-version=2016-03-30
Intestazione
Content-Type: application/json
x-ms-client-request-id: 13d9f885…a92d-8a9f8cf9f707
Authorization: Bearer eyJ0eX ... FWSXfwtQ
Corpo
{
"etag": "59085E253E2244A59F664A2F447E675E",
"properties":
{
"fromSourceSystem": false,
"key": "22c3fa019b3945dc97143ebc3ad74cbf--1111fa019b3945dc97143ebc3ad74cbf",
"columnName": "Col1",
"termId": "https://test.catalog.com/catalogs/DefaultCatalog/glossaries/DefaultGlossary/terms/ed975c9d-2fb2-49a3-b6f2-222389cefd7e",
}
}
Risposta
Codici di stato
Codice | Descrizione |
---|---|
201 | Creazione riuscita. La richiesta è stata soddisfatta e è stata creata una nuova annotazione. |
200 | OK. È stata aggiornata un'annotazione esistente. |
412 | Precondizione non riuscita. La richiesta è stata annullata a causa della mancata corrispondenza ETag in almeno un elemento. |
Content-Type
application/json
Intestazione
HTTP/1.1 201 Created
x-ms-request-id: 72cf83c0…058f2b2a0c68
Location: https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0...1be45ecd462a/experts/22c3fa019b3945dc97143ebc3ad74cbf-1111fa019b3945dc97143ebc3ad74cbf
Registrare o aggiornare
Registra un nuovo asset di dati o ne aggiorna uno esistente se esiste già un asset con la stessa identità. Gli elementi possono facoltativamente contenere valori ETag per abilitare il controllo della concorrenza ottimistica.
Esempio introduttivo su GitHub
Richiesta
POST https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}?api-version={api-version}
Nota
Alcune implementazioni client HTTP possono inviare automaticamente richieste in risposta a 302 dal server, ma in genere rimuovere le intestazioni di autorizzazione dalla richiesta. Poiché l'intestazione Authorization è necessaria per effettuare richieste ad ADC, è necessario assicurarsi che l'intestazione authorization sia ancora specificata quando si esegue di nuovo una richiesta a un percorso di reindirizzamento specificato da ADC. Di seguito è riportato il codice di esempio che illustra questa operazione usando l'oggetto .NET HttpWebRequest.
Parametri dell'URI
Nome | Descrizione | Tipo di dati |
---|---|---|
catalog_name | Nome del catalogo o "DefaultCatalog" per usare il catalogo predefinito. | string |
view_name | Nome della visualizzazione asset di dati. | string |
api-version | La versione delle API. | string |
Esempio di POST
POST https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables?api-version=2016-03-30
Intestazione
Content-Type: application/json
x-ms-client-request-id: 13c45c14…46ab469473f0
Authorization: Bearer eyJ0eX ... FWSXfwtQ
Esempio di corpo
{
"roles": [
{
"role": "Contributor",
"members": [
{
"objectId": "00000000-0000-0000-0000-000000000201"
}
]
}
],
"properties": {
"fromSourceSystem": true,
"name": "Orders",
"dataSource": {
"sourceType": "SQL Server",
"objectType": "Table"
},
"dsl": {
"protocol": "tds",
"authentication": "windows",
"address": {
"server": "MyServer.contoso.com",
"database": "NORTHWND",
"schema": "dbo",
"object": "Orders"
}
},
"lastRegisteredBy": {
"upn": "user1@contoso.com",
"firstName": "User1FirstName",
"lastName": "User1LastName"
},
"containerId": "containers/3b2c00be-...-1f15367f54e4"
},
"annotations": {
"schema": {
"roles": [
{
"role": "Contributor",
"members": [
{
"objectId": "00000000-0000-0000-0000-000000000201"
}
]
}
],
"properties": {
"fromSourceSystem": true,
"columns": [
{
"name": "OrderID",
"isNullable": false,
"type": "int",
"maxLength": 4,
"precision": 10
},
{
"name": "CustomerID",
"isNullable": true,
"type": "nchar",
"maxLength": 10,
"precision": 0
},
{
"name": "EmployeeID",
"isNullable": true,
"type": "int",
"maxLength": 4,
"precision": 10
},
{
"name": "OrderDate",
"isNullable": true,
"type": "datetime",
"maxLength": 8,
"precision": 23
}
]
}
}
}
}
Risposta
Codici di stato
Codice | Descrizione |
---|---|
200 | OK. Un asset esistente è stato aggiornato. |
201 | Creazione riuscita. La richiesta è stata soddisfatta e è stato creato un nuovo asset. |
412 | Precondizione non riuscita. La richiesta è stata annullata a causa della mancata corrispondenza ETag in almeno un elemento. |
Content-Type
application/json
Intestazione
HTTP/1.1 201 Created
x-ms-request-id: 72cf83c0…058f2b2a0c68
Location: https://e2255231-6dd3-1a0d-a6d8-7fc96dd780c2-mycatalog.api.azuredatacatalog.com/catalogs/MyCatalog/views/tables/042297b0…1be45ecd462a
Origini dati supportate
Per l'elenco degli oggetti origini dati attualmente supportati, vedere Azure Data Catalog origini dati supportate.
Esempio
Questo esempio illustra come ottenere un token di accesso di Azure AD ed eseguire un'operazione Register .
Nota In questo esempio viene utilizzata la parola chiave DefaultCatalog per aggiornare il catalogo predefinito dell'utente. In alternativa, è possibile specificare il nome del catalogo effettivo. Per trovare il nome del catalogo, accedere ad Azure Data Catalog e scegliere Utente. Verrà visualizzato il nome del catalogo .
using System;
using System.Net;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System.IO;
...
//To learn how to register a client app and get a Client ID,
// see https://msdn.microsoft.com/library/azure/mt403303.aspx#clientID
static string clientIDFromAzureAppRegistration = "{clientID}";
static void Main(string[] args)
{
//Note: This example uses the "DefaultCatalog" keyword to update the user's default catalog. You may alternately
//specify the actual catalog name.
string catalogName = "DefaultCatalog";
string registerJson = Register(catalogName, OrdersJsonWithEveryoneContributor());
Console.ReadLine();
}
static AuthenticationResult AccessToken()
{
//Get access token:
// To call a Data Catalog REST operation, create an instance of AuthenticationContext and call AcquireToken
// AuthenticationContext is part of the Active Directory Authentication Library NuGet package
// To install the Active Directory Authentication Library NuGet package in Visual Studio,
// run "Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory" from the nuget Package Manager Console.
//Resource Uri for Data Catalog API
string resourceUri = "https://api.azuredatacatalog.com";
//To learn how to register a client app and get a Client ID, see https://msdn.microsoft.com/library/azure/mt403303.aspx#clientID
string clientId = clientIDFromAzureAppRegistration;
//A redirect uri gives AAD more details about the specific application that it will authenticate.
//Since a client app does not have an external service to redirect to, this Uri is the standard placeholder for a client app.
string redirectUri = "https://login.live.com/oauth20_desktop.srf";
// Create an instance of AuthenticationContext to acquire an Azure access token
// OAuth2 authority Uri
string authorityUri = "https://login.windows.net/common/oauth2/authorize";
AuthenticationContext authContext = new AuthenticationContext(authorityUri);
// Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint
// AcquireToken takes a Client Id that Azure AD creates when you register your client app.
return authContext.AcquireToken(resourceUri, clientId, new Uri(redirectUri), PromptBehavior.RefreshSession);
}
static string Register(string catalogName, string json)
{
string location = string.Empty;
string fullUri = string.Format("https://api.azuredatacatalog.com/catalogs/{0}/views/{1}?api-version=2016-03-30", catalogName, viewType);
//Create a POST WebRequest as a Json content type
HttpWebRequest request = System.Net.WebRequest.Create(fullUri) as System.Net.HttpWebRequest;
request.KeepAlive = true;
request.Method = "POST";
try
{
var response = SetRequestAndGetResponse(request, json);
//Get the Response header which contains the data asset ID
//The format is: tables/{data asset ID}
location = httpWebResponse.Headers["Location"];
}
catch (WebException ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.Status);
if (ex.Response != null)
{
// can use ex.Response.Status, .StatusDescription
if (ex.Response.ContentLength != 0)
{
using (var stream = ex.Response.GetResponseStream())
{
using (var reader = new StreamReader(stream))
{
Console.WriteLine(reader.ReadToEnd());
}
}
}
}
location = null;
}
return location;
}
static HttpWebResponse SetRequestAndGetResponse(HttpWebRequest request, string payload = null)
{
while (true)
{
//To authorize the operation call, you need an access token which is part of the Authorization header
request.Headers.Add("Authorization", AccessToken().CreateAuthorizationHeader());
//Set to false to be able to intercept redirects
request.AllowAutoRedirect = false;
if (!string.IsNullOrEmpty(payload))
{
byte[] byteArray = Encoding.UTF8.GetBytes(payload);
request.ContentLength = byteArray.Length;
request.ContentType = "application/json";
//Write JSON byte[] into a Stream
request.GetRequestStream().Write(byteArray, 0, byteArray.Length);
}
else
{
request.ContentLength = 0;
}
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
// Requests to **Azure Data Catalog (ADC)** may return an HTTP 302 response to indicate
// redirection to a different endpoint. In response to a 302, the caller must re-issue
// the request to the URL specified by the Location response header.
if (response.StatusCode == HttpStatusCode.Redirect)
{
string redirectedUrl = response.Headers["Location"];
HttpWebRequest nextRequest = WebRequest.Create(redirectedUrl) as HttpWebRequest;
nextRequest.Method = request.Method;
request = nextRequest;
}
else
{
return response;
break;
}
}
}
static string OrdersJsonWithEveryoneContributor()
{
return @"
{
'roles': [
{
'role': 'Contributor',
'members': [
{
'objectId': '00000000-0000-0000-0000-000000000201'
}
]
}
],
'properties': {
'fromSourceSystem': 'true',
'name': 'Orders',
'dataSource': {
'sourceType': 'SQL Server',
'objectType': 'Table'
},
'dsl': {
'protocol': 'tds',
'authentication': 'windows',
'address': {
'server': 'MyServer.contoso.com',
'database': 'NORTHWND',
'schema': 'dbo',
'object': 'Orders'
}
},
'lastRegisteredBy': {
'upn': 'user1@contoso.com',
'firstName': 'User1FirstName',
'lastName': 'User1LastName'
},
'containerId': 'containers/a9f8a2e1-d826-7c0c-b186-c7f4334a6b4f'
},
'annotations': {
'schema': {
'roles': [
{
'role': 'Contributor',
'members': [
{
'objectId': '00000000-0000-0000-0000-000000000201'
}
]
}
],
'properties': {
'fromSourceSystem': 'true',
'columns': [
{
'name': 'OrderID',
'isNullable': false,
'type': 'int',
'maxLength': 4,
'precision': 10
},
{
'name': 'CustomerID',
'isNullable': true,
'type': 'nchar',
'maxLength': 10,
'precision': 0
},
{
'name': 'EmployeeID',
'isNullable': true,
'type': 'int',
'maxLength': 4,
'precision': 10
},
{
'name': 'OrderDate',
'isNullable': true,
'type': 'datetime',
'maxLength': 8,
'precision': 23
}
]
}
}
}
}";
}
Ottenere con le annotazioni
Ottiene un asset di dati con annotazioni.
Supporta il parametro adc.metadata
di intestazione Accept facoltativo che richiede l'inserimento di ETag nella risposta per tutti gli elementi. Usare i valori minimi o completi per ottenere ETag in risposta. I valori validi sono none
, minimal
e full
.
Richiesta
GET https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}/{view_item_id}?api-version={api-version}
Nota
Alcune implementazioni client HTTP possono inviare automaticamente richieste in risposta a 302 dal server, ma in genere rimuovere le intestazioni di autorizzazione dalla richiesta. Poiché l'intestazione Authorization è necessaria per effettuare richieste ad ADC, è necessario assicurarsi che l'intestazione authorization sia ancora specificata quando si esegue di nuovo una richiesta a un percorso di reindirizzamento specificato da ADC. Di seguito è riportato il codice di esempio che illustra questa operazione usando l'oggetto .NET HttpWebRequest.
Parametri dell'URI
Nome | Descrizione | Tipo di dati |
---|---|---|
catalog_name | Nome del catalogo o "DefaultCatalog" per usare il catalogo predefinito. | string |
view_name | Nome della visualizzazione asset di dati. | string |
view_item_id | ID di un elemento di visualizzazione. | string |
api-version | La versione delle API. | string |
Esempio GET
GET https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b...1be45ecd462a?api-version=2016-03-30
Intestazione
x-ms-client-request-id: 8091955f…8f5b4c0acede
Authorization: Bearer eXJ0eyAiOiJKV1QiLCJhbGciOi...
Accept: application/json;adc.metadata=full
Risposta
Codici di stato
Codice | Descrizione |
---|---|
200 | OK. La risposta contiene la visualizzazione asset richiesta. |
Content-Type
application/json
Intestazione
x-ms-request-id: 1095e88c…caffabd6dabd
Content-Type: application/json; charset=utf-8
Corpo
{
"id": "https://e2255231-6dd3-1a0d-a6d8-7fc96dd780c2-mycatalog.api.azuredatacatalog.com/catalogs/MyCatalog/views/tables/042297b0-...-1be45ecd462a",
"etag": "1234567891",
"timestamp": "2015-05-15T03:48:39.2425547",
"roles": [
{
"role": "Contributor",
"members": [
{
"objectId": "00000000-0000-0000-0000-000000000201"
}
]
}
],
"effectiveRights": [
"Read",
"Delete",
"ChangeOwnership",
"ChangeVisibility",
"ViewPermissions",
"ViewRoles",
"Update",
"TakeOwnership"
],
"properties": {
"fromSourceSystem": true,
"name": "Orders",
"dataSource": {
"sourceType": "SQL Server",
"objectType": "Table"
},
"dsl": {
"protocol": "tds",
"authentication": "windows",
"address": {
"server": "MyServer.contoso.com",
"database": "NORTHWND",
"schema": "dbo",
"object": "Orders"
}
},
"lastRegisteredBy": {
"upn": "user1@contoso.com",
"firstName": "User1FirstName",
"lastName": "User1LastName"
},
"containerId": "containers/3b2c00be-...-1f15367f54e4"
},
"annotations": {
"schema": {
"id": "https://e2255231-6dd3-1a0d-a6d8-7fc96dd780c2-mycatalog.api.azuredatacatalog.com/catalogs/MyCatalog/views/tables/042297b0-...-1be45ecd462a/schema",
"etag": "1234567892",
"timestamp": "2015-05-15T03:48:39.2425547",
"roles": [
{
"role": "Contributor",
"members": [
{
"objectId": "00000000-0000-0000-0000-000000000201"
}
]
}
],
"effectiveRights": [
"Read",
"Delete",
"ViewRoles",
"Update"
],
"properties": {
"fromSourceSystem": true,
"columns": [
{
"name": "OrderID",
"isNullable": false,
"type": "int",
"maxLength": 4,
"precision": 10
},
{
"name": "CustomerID",
"isNullable": true,
"type": "nchar",
"maxLength": 10,
"precision": 0
},
{
"name": "EmployeeID",
"isNullable": true,
"type": "int",
"maxLength": 4,
"precision": 10
},
{
"name": "OrderDate",
"isNullable": true,
"type": "datetime",
"maxLength": 8,
"precision": 23
}
]
}
},
"experts": [
{
"id": "https://e2255231-6dd3-1a0d-a6d8-7fc96dd780c2-mycatalog.api.azuredatacatalog.com/catalogs/MyCatalog/views/tables/042297b0-...-1be45ecd462a/experts/22c3fa019b3945dc97143ebc3ad74cbf-1111fa019b3945dc97143ebc3ad74cbf",
"etag": "1234567893",
"timestamp": "2015-05-15T03:48:39.2425547",
"roles": [
{
"role": "Contributor",
"members": [
{
"objectId": "22c3fa01-9b39-45dc-9714-3ebc3ad74cbf"
}
]
}
],
"effectiveRights": [
"Read",
"Delete",
"ViewRoles",
"Update"
],
"properties": {
"fromSourceSystem": false,
"key": "22c3fa019b3945dc97143ebc3ad74cbf-1111fa019b3945dc97143ebc3ad74cbf",
"expert": {
"upn": "expert1@contoso.com",
"objectId": "1111fa019b3945dc97143ebc3ad74cbf"
}
}
}
]
}
}
Cerca
Esegue ricerche sugli asset di dati in base ai termini di ricerca specificati.
Richiesta
GET https://api.azuredatacatalog.com/catalogs/{catalog_name}/search/search?api-version={api-version}&searchTerms={search_terms}&facets={facet_terms}&startPage={start_page}&count={count}&view={data_source}
Nota
Alcune implementazioni client HTTP possono inviare automaticamente richieste in risposta a 302 dal server, ma in genere rimuovere le intestazioni di autorizzazione dalla richiesta. Poiché l'intestazione Authorization è necessaria per effettuare richieste ad ADC, è necessario assicurarsi che l'intestazione authorization sia ancora specificata quando si esegue di nuovo una richiesta a un percorso di reindirizzamento specificato da ADC. Di seguito è riportato il codice di esempio che illustra questa operazione usando l'oggetto .NET HttpWebRequest.
Parametri dell'URI
Nome | Descrizione | Tipo di dati |
---|---|---|
catalog_name | Nome del catalogo o "DefaultCatalog" per usare il catalogo predefinito. | string |
api-version | La versione delle API. | string |
Parametri di query
Nome | Descrizione | Tipo di dati |
---|---|---|
searchTerms | Obbligatorio. Termini per la ricerca. | string |
facet | Facoltativo I nomi di campo delimitati da virgole per applicare facet ai risultati. | string |
startPage | Pagina iniziale facoltativa dei risultati usati per il paging insieme al parametro count. I valori consentiti sono maggiori di 0, se viene passato un valore minore o uguale a 0, viene restituito un errore HTTP con codice di errore 400. | string |
count | Numero facoltativo di risultati desiderati in una pagina (paging). Il valore predefinito è 10. I valori consentiti sono compresi tra 1 e 100 inclusi. Se viene passato un valore non compreso nell'intervallo, viene restituito un errore HTTP con codice di errore 400. Per ottenere la parte successiva dei risultati della ricerca, ripetere la richiesta, ma aumentare startPage di 1. | Integer |
vista | Facoltativo Ottiene la visualizzazione che il client vuole visualizzare, per il momento l'unica opzione supportata in DataSource. | string |
Esempio GET
https://api.azuredatacatalog.com/catalogs/DefaultCatalog/search/search?searchTerms=My_Server&count=10&startPage=1&api-version=2016-03-30
Intestazione
x-ms-client-request-id: 546f053a…a1612f3a3d69
Authorization: Bearer eXJ0eyAiOiJKV1QiLCJhbGciOi...
Risposta
Codici di stato
Codice | Descrizione |
---|---|
200 | OK. Operazione riuscita con risultato della ricerca. |
Content-Type
application/json
Intestazione
x-ms-request-id: 0ab2e798…088223257ad2
Content-Length: 3926
Corpo
{
"query": {
"id": "bd067219...4ba9a56e204b",
"searchTerms": "My_server",
"startIndex": 1,
"startPage": 1,
"count": 1,
"id": "bd067219...4ba9a56e204b",
"totalResults": 508,
"startIndex": 1,
"itemsPerPage": 1,
"results": [{
"updated": "0001-01-01T00:00:00",
"content": {
"properties": {
"fromSourceSystem": true,
"name": "MyTable",
"dsl": {
"protocol": "tds",
"authentication": "windows",
"address": {
"server": "My_SERVER",
"database": "my_DB",
"schema": "my_SCHEMA",
"object": "my_TABLE"
}
},
"dataSource": {
"sourceType": "SQL Server",
"objectType": "Table"
},
"lastRegisteredBy": {
"upn": "user1@contoso.com",
"firstName": "User1FirstName",
"lastName": "User1LastName"
},
"containerId": "https://e2255231-6dd3-1a0d-a6d8-7fc96dd780c2-mycatalog.api.azuredatacatalog.com/catalogs/MyCatalog/views/containers/a9f8a2e1-d826-7c0c-b186-c7f4334a6b4f"
},
"id": "https://e2255231-6dd3-1a0d-a6d8-7fc96dd780c2-mycatalog.api.azuredatacatalog.com/catalogs/MyCatalog/views/tables/08d91f0d-26a0-1e8e-ab3b-d463ac3e62cb",
"type": "Microsoft.DataSource.Table.1",
"timestamp": "2016-03-15T23:20:12.5423855",
"annotations": {
"schema": {
"properties": {
"fromSourceSystem": true,
"columns": [
{
"name": "ID",
"type": "int",
"maxLength": 4,
"precision": 10,
"isNullable": false
},
{
"name": "Column2",
"type": "nchar",
"maxLength": 10,
"precision": 0,
"isNullable": true
}
]
},
"id": "https://e2255231-6dd3-1a0d-a6d8-7fc96dd780c2-mycatalog.api.azuredatacatalog.com/catalogs/MyCatalog/views/tables/08d91f0d-26a0-1e8e-ab3b-d463ac3e62cb/schema",
"type": "Microsoft.DataSource.Schema.1",
"timestamp": "2016-03-15T23:20:12.5423855",
"roles": [
{
"role": "Contributor",
"members": [
{
"objectId": "00000000-0000-0000-0000-000000000201"
}
]
}
],
"effectiveRights": [
"Read",
"Delete",
"ViewRoles",
"Update"
]
}
},
"roles": [
{
"role": "Contributor",
"members": [
{
"objectId": "00000000-0000-0000-0000-000000000201"
}
]
}
],
"effectiveRights": [
"Read",
"Delete",
"ChangeOwnership",
"ChangeVisibility",
"ViewPermissions",
"ViewRoles",
"Update",
"TakeOwnership"
]
},
"hitProperties": [{
"fieldPath": "properties.dsl.address.server",
"highlightDetail": [{
"highlightedWords": [{
"word": "My_sERVER"
}],
"highlightedFragment": "My_sERVER"
}]
},
{
"fieldPath": "properties.dataSource.sourceType",
"highlightDetail": [{
"highlightedWords": [{
"word": "Server"
}],
"highlightedFragment": "SQL Server"
}]
},
{
"fieldPath": "properties.dsl.address.object",
"highlightDetail": [{
"highlightedWords": [{
"word": "my"
}],
"highlightedFragment": "my_TABLE"
}]
},
{
"fieldPath": "properties.dsl.address.database",
"highlightDetail": [{
"highlightedWords": [{
"word": "my"
}],
"highlightedFragment": "my_DB"
}]
},
{
"fieldPath": "properties.dsl.address.schema",
"highlightDetail": [{
"highlightedWords": [{
"word": "my"
}],
"highlightedFragment": "my_SCHEMA"
}]
}]
}]
}
Esempio
Questo esempio illustra come ottenere un token di accesso di Azure AD ed eseguire un'operazione di ricerca .
Nota Per trovare il nome del catalogo, accedere ad Azure Data Catalog e scegliere Utente. Verrà visualizzato il nome del catalogo .
using System;
using System.Net;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System.IO;
...
//To learn how to register a client app and get a Client ID,
// see https://msdn.microsoft.com/library/azure/mt403303.aspx#clientID
static string clientIDFromAzureAppRegistration = "{clientID}";
static void Main(string[] args)
{
//Note: This example uses the "DefaultCatalog" keyword to update the user's default catalog. You may alternately
//specify the actual catalog name.
string catalogName = "DefaultCatalog";
//Search everything
string searchTerm = string.Empty;
string searchJson = Search(catalogName, searchTerm);
//Other examples "tags:=Sales", "upn:{username}"
Console.WriteLine(searchJson);
}
static AuthenticationResult AccessToken()
{
//Get access token:
// To call a Data Catalog REST operation, create an instance of AuthenticationContext and call AcquireToken
// AuthenticationContext is part of the Active Directory Authentication Library NuGet package
// To install the Active Directory Authentication Library NuGet package in Visual Studio,
// run "Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory" from the nuget Package Manager Console.
//Resource Uri for Data Catalog API
string resourceUri = "https://api.azuredatacatalog.com";
//To learn how to register a client app and get a Client ID, see https://msdn.microsoft.com/library/azure/mt403303.aspx#clientID
string clientId = clientIDFromAzureAppRegistration;
//A redirect uri gives AAD more details about the specific application that it will authenticate.
//Since a client app does not have an external service to redirect to, this Uri is the standard placeholder for a client app.
string redirectUri = "https://login.live.com/oauth20_desktop.srf";
// Create an instance of AuthenticationContext to acquire an Azure access token
// OAuth2 authority Uri
string authorityUri = "https://login.windows.net/common/oauth2/authorize";
AuthenticationContext authContext = new AuthenticationContext(authorityUri);
// Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint
// AcquireToken takes a Client Id that Azure AD creates when you register your client app.
return authContext.AcquireToken(resourceUri, clientId, new Uri(redirectUri), PromptBehavior.RefreshSession);
}
static string Search(string catalogName, string searchTerm)
{
string responseContent = string.Empty;
//NOTE: To find the Catalog Name, sign into Azure Data Catalog, and choose User. You will see a list of Catalog names.
string fullUri =
string.Format("https://api.azuredatacatalog.com/catalogs/{0}/search/search?searchTerms={1}&count=10&api-version=2016-03-30", catalogName, searchTerm);
//Create a GET WebRequest
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fullUri);
request.Method = "GET";
try
{
//Get HttpWebResponse from GET request
using (HttpWebResponse httpResponse = SetRequestAndGetResponse(request))
{
//Get StreamReader that holds the response stream
using (StreamReader reader = new System.IO.StreamReader(httpResponse.GetResponseStream()))
{
responseContent = reader.ReadToEnd();
}
}
}
catch (WebException ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.Status);
if (ex.Response != null)
{
// can use ex.Response.Status, .StatusDescription
if (ex.Response.ContentLength != 0)
{
using (var stream = ex.Response.GetResponseStream())
{
using (var reader = new StreamReader(stream))
{
Console.WriteLine(reader.ReadToEnd());
}
}
}
}
return null;
}
return responseContent;
}
static HttpWebResponse SetRequestAndGetResponse(HttpWebRequest request, string payload = null)
{
while (true)
{
//To authorize the operation call, you need an access token which is part of the Authorization header
request.Headers.Add("Authorization", AccessToken().CreateAuthorizationHeader());
//Set to false to be able to intercept redirects
request.AllowAutoRedirect = false;
if (!string.IsNullOrEmpty(payload))
{
byte[] byteArray = Encoding.UTF8.GetBytes(payload);
request.ContentLength = byteArray.Length;
request.ContentType = "application/json";
//Write JSON byte[] into a Stream
request.GetRequestStream().Write(byteArray, 0, byteArray.Length);
}
else
{
request.ContentLength = 0;
}
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
// Requests to **Azure Data Catalog (ADC)** may return an HTTP 302 response to indicate
// redirection to a different endpoint. In response to a 302, the caller must re-issue
// the request to the URL specified by the Location response header.
if (response.StatusCode == HttpStatusCode.Redirect)
{
string redirectedUrl = response.Headers["Location"];
HttpWebRequest nextRequest = WebRequest.Create(redirectedUrl) as HttpWebRequest;
nextRequest.Method = request.Method;
request = nextRequest;
}
else
{
return response;
break;
}
}
}
Elimina
Elimina un asset di dati e tutte le annotazioni (se presenti) associate.
Supporta l'intestazione facoltativa If-Match per il controllo della concorrenza ottimistica. È supportato solo il formato debole, ad esempio W/"123456789".
Richiesta
DELETE https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}/{view_item_id}?api-version={api-version}
Nota
Alcune implementazioni client HTTP possono rimettere automaticamente richieste in risposta a 302 dal server, ma in genere stripare le intestazioni di autorizzazione dalla richiesta. Poiché l'intestazione di autorizzazione è necessaria per effettuare richieste ad ADC, è necessario assicurarsi che l'intestazione di autorizzazione venga ancora fornita quando si esegue nuovamente una richiesta a un percorso di reindirizzamento specificato da ADC. Di seguito è riportato il codice di esempio che illustra questa operazione usando l'oggetto .NET HttpWebRequest.
Parametri dell'URI
Nome | Descrizione | Tipo di dati |
---|---|---|
catalog_name | Nome del catalogo o "DefaultCatalog" per usare il catalogo predefinito. | string |
view_name | Nome della visualizzazione asset dati. | string |
view_item_id | ID di un elemento View. | string |
api-version | La versione delle API. | string |
Esempio di DELETE
DELETE https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0...1be45ecd462a?api-version=2016-03-30
Intestazione
x-ms-client-request-id: 59b68a46…46dc3ec8dcb8
Authorization: Bearer eXJ0eyAiOiJKV1QiLCJhbGciOi...
If-Match: W/"123456789"
Risposta
Codici di stato
Codice | Descrizione |
---|---|
204 | Nessun contenuto restituito NOTA: la semantica dell'operazione di eliminazione è "delete if exists", quindi se l'asset o l'annotazione non esiste il codice di stato di esito positivo 204 (NoContent) viene restituito. |
412 | Precondizione non riuscita. La richiesta è stata annullata a causa della mancata corrispondenza ETag. |
Content-Type
application/json
Intestazione
x-ms-request-id: 664f86cf…5e512fa78e92
Aggiornare un'annotazione
Aggiornamenti un'annotazione.
Gli elementi possono contenere facoltativamente valori ETag per abilitare il controllo di concorrenza ottimistica per loro.
Richiesta
PUT https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}/{view_item_id}/{nested_view_name}/{nested_non_singleton_view_item_id}?api-version={api-version}
PUT https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}/{view_item_id}/{nested_view_name}?api-version={api-version}
Nota
Alcune implementazioni client HTTP possono rimettere automaticamente richieste in risposta a 302 dal server, ma in genere stripare le intestazioni di autorizzazione dalla richiesta. Poiché l'intestazione di autorizzazione è necessaria per effettuare richieste ad ADC, è necessario assicurarsi che l'intestazione di autorizzazione venga ancora fornita quando si esegue nuovamente una richiesta a un percorso di reindirizzamento specificato da ADC. Di seguito è riportato il codice di esempio che illustra questa operazione usando l'oggetto .NET HttpWebRequest.
Parametri dell'URI
Nome | Descrizione | Tipo di dati |
---|---|---|
catalog_name | Nome del catalogo o "DefaultCatalog" per usare il catalogo predefinito. | string |
view_name | Nome della visualizzazione asset dati. | string |
view_item_id | ID di un elemento View. | string |
nested_view_name | Nome di una visualizzazione annidata. | string |
nested_non_singleton_view_item_id | ID di un elemento view non singleton annidato. Deve essere fornito per una visualizzazione non singleton. | string |
api-version | La versione delle API. | string |
Esempio PUT per una visualizzazione della documentazione singleton
PUT https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0...1be45ecd462a/documentation?api-version=2016-03-30
Intestazione
Content-Type: application/json; charset=utf-8
x-ms-client-request-id: 059692ee-...-57490fcec42c
Authorization: Bearer eXJ0eyAiOiJKV1QiLCJhbGciOi...
Schema del corpo
Body:
{
"fromSourceSystem": false,
"etag": "123456789",
"content": "<new documentation content>",
"mimetype": "text",
}
Risposta
Codici di stato
Codice | Descrizione |
---|---|
200 | OK. È stata aggiornata un'annotazione esistente. |
412 | Precondizione non riuscita. La richiesta è stata annullata a causa della mancata corrispondenza ETag in almeno un elemento. |
Content-Type
application/json
Intestazione
x-ms-request-id: 3b8668da…1558d0f407c0
Eliminare un'annotazione
Elimina un'annotazione e tutte le annotazioni annidate (se presenti).
Supporta l'intestazione facoltativa di If-Match per il controllo di concorrenza ottimistica. È supportato solo il formato debole, ad esempio W/"123456789".
Richiesta
DELETE https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}/{view_item_id}/{nested_view_name}/{nested_non_singleton_view_item_id}?api-version={api-version}
DELETE https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}/{view_item_id}/{nested_view_name}?api-version={api-version}
Nota
Alcune implementazioni client HTTP possono rimettere automaticamente richieste in risposta a 302 dal server, ma in genere stripare le intestazioni di autorizzazione dalla richiesta. Poiché l'intestazione di autorizzazione è necessaria per effettuare richieste ad ADC, è necessario assicurarsi che l'intestazione di autorizzazione venga ancora fornita quando si esegue nuovamente una richiesta a un percorso di reindirizzamento specificato da ADC. Di seguito è riportato il codice di esempio che illustra questa operazione usando l'oggetto .NET HttpWebRequest.
Parametri dell'URI
Nome | Descrizione | Tipo di dati |
---|---|---|
catalog_name | Nome del catalogo o "DefaultCatalog" per usare il catalogo predefinito. | string |
view_name | Nome della visualizzazione asset dati. | string |
view_item_id | ID di un elemento View. | string |
nested_view_name | Nome di una visualizzazione annidata. | string |
nested_non_singleton_view_item_id | ID di un elemento view non singleton annidato. Deve essere fornito per una visualizzazione non singleton. | string |
api-version | La versione delle API. | string |
Esempio di DELETE
DELETE https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0-c187-49cc-8f30-1be45ecd462a/experts/22c3fa019b3945dc97143ebc3ad74cbf-1111fa019b3945dc97143ebc3ad74cbf?api-version=2016-03-30
Intestazione
x-ms-client-request-id: c8da5f08…67b203d77b2d
Authorization: Bearer eXJ0eyAiOiJKV1QiLCJhbGciOi...
If-Match: W/"123456789"
Risposta
Codici di stato
Codice | Descrizione |
---|---|
204 | Nessun contenuto restituito |
412 | Precondizione non riuscita. La richiesta è stata annullata a causa della mancata corrispondenza ETag. |
Content-Type
application/json
Intestazione
x-ms-request-id: 276b9dc4…e5f7017805c