Data Asset (API rest de Azure Data Catalog)
Anotar
Anota un recurso.
etag
la propiedad es opcional y se usa para el control de simultaneidad.
POST https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}/{view_item_id}/{nested_view_name}?api-version={api-version}
Nota:
Algunas implementaciones de cliente HTTP pueden volver a emitir automáticamente solicitudes en respuesta a un 302 desde el servidor, pero normalmente quitar los encabezados de autorización de la solicitud. Dado que el encabezado Authorization es necesario para realizar solicitudes a ADC, debe asegurarse de que el encabezado Authorization todavía se proporciona al volver a emitir una solicitud a una ubicación de redireccionamiento especificada por ADC. A continuación se muestra el código de ejemplo que muestra esto mediante el objeto HttpWebRequest de .NET.
Parámetros URI
Nombre | Descripción | Tipo de datos |
---|---|---|
catalog_name | Nombre del catálogo o "DefaultCatalog" para usar el catálogo predeterminado. | String |
view_name | Nombre de la vista de recursos de datos. | String |
view_item_id | Id. de un elemento View. | String |
nested_view_name | Nombre de un elemento vista anidado. | String |
api-version | Versión de la API. | String |
Ejemplo: Agregar expertos
POST https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0...1be45ecd462a/experts?api-version=2016-03-30
Encabezado
Content-Type: application/json
x-ms-client-request-id: 13d9f885…a92d-8a9f8cf9f707
Authorization: Bearer eyJ0eX ... FWSXfwtQ
Cuerpo
{
"etag": "59085E253E2244A59F664A2F447E675E",
"properties":
{
"fromSourceSystem": false,
"key": "22c3fa019b3945dc97143ebc3ad74cbf--1111fa019b3945dc97143ebc3ad74cbf",
"expert":
{
"upn": "expert1@contoso.com",
"objectId": "1111fa019b3945dc97143ebc3ad74cbf"
},
}
}
Ejemplo: Agregar etiquetas de términos de glosario
POST https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0...1be45ecd462a/termTags?api-version=2016-03-30
Encabezado
Content-Type: application/json
x-ms-client-request-id: 13d9f885…a92d-8a9f8cf9f707
Authorization: Bearer eyJ0eX ... FWSXfwtQ
Cuerpo
{
"etag": "59085E253E2244A59F664A2F447E675E",
"properties":
{
"fromSourceSystem": false,
"key": "22c3fa019b3945dc97143ebc3ad74cbf--1111fa019b3945dc97143ebc3ad74cbf",
"termId": "https://test.catalog.com/catalogs/DefaultCatalog/glossaries/DefaultGlossary/terms/ed975c9d-2fb2-49a3-b6f2-222389cefd7e",
}
}
Ejemplo: Agregar etiquetas de términos de columna de glosario
POST https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0...1be45ecd462a/columnTermTags?api-version=2016-03-30
Encabezado
Content-Type: application/json
x-ms-client-request-id: 13d9f885…a92d-8a9f8cf9f707
Authorization: Bearer eyJ0eX ... FWSXfwtQ
Body
{
"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",
}
}
Response
Códigos de estado
Código | Descripción |
---|---|
201 | Creado. Se ha cumplido la solicitud y se ha creado una nueva anotación. |
200 | Aceptar. Se actualizó una anotación existente. |
412 | Error de condición previa. La solicitud se canceló debido a la falta de coincidencia de ETag en al menos un elemento. |
Content-Type
application/json
Encabezado
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
Registro o actualización
Registra un nuevo recurso de datos o actualiza uno existente si ya existe un recurso con la misma identidad. Opcionalmente, los elementos pueden contener valores ETag para habilitar el control de simultaneidad optimista para ellos.
Ejemplo de introducción en GitHub
Solicitud
POST https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}?api-version={api-version}
Nota
Algunas implementaciones de cliente HTTP pueden volver a emitir automáticamente solicitudes en respuesta a un 302 desde el servidor, pero normalmente quitar los encabezados de autorización de la solicitud. Dado que el encabezado Authorization es necesario para realizar solicitudes a ADC, debe asegurarse de que el encabezado Authorization todavía se proporciona al volver a emitir una solicitud a una ubicación de redireccionamiento especificada por ADC. A continuación se muestra el código de ejemplo que muestra esto mediante el objeto HttpWebRequest de .NET.
Parámetros URI
Nombre | Descripción | Tipo de datos |
---|---|---|
catalog_name | Nombre del catálogo o "DefaultCatalog" para usar el catálogo predeterminado. | String |
view_name | Nombre de la vista de recursos de datos. | String |
api-version | Versión de la API. | String |
Ejemplo de POST
POST https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables?api-version=2016-03-30
Encabezado
Content-Type: application/json
x-ms-client-request-id: 13c45c14…46ab469473f0
Authorization: Bearer eyJ0eX ... FWSXfwtQ
Ejemplo de cuerpo
{
"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
}
]
}
}
}
}
Response
Códigos de estado
Código | Descripción |
---|---|
200 | Aceptar. Se actualizó un recurso existente. |
201 | Creado. Se ha cumplido la solicitud y se ha creado un nuevo recurso. |
412 | Error de condición previa. La solicitud se canceló debido a la falta de coincidencia de ETag en al menos un elemento. |
Content-Type
application/json
Encabezado
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
Orígenes de datos compatibles
Consulte Azure Data Catalog orígenes de datos admitidos para obtener la lista de objetos de orígenes de datos admitidos actualmente.
Ejemplo
En este ejemplo se muestra cómo obtener un token de acceso de Azure AD y realizar una operación de registro .
Nota En este ejemplo se usa la palabra clave DefaultCatalog para actualizar el catálogo predeterminado del usuario. También puede especificar el nombre del catálogo real. Para buscar el nombre del catálogo, inicie sesión en Azure Data Catalog y elija Usuario. Verá el nombre del catálogo .
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
}
]
}
}
}
}";
}
Obtener con anotaciones
Obtiene un recurso de datos con anotaciones.
Admite el parámetro adc.metadata
accept header opcional que solicita que ETags se incluya en la respuesta de todos los elementos. Use valores mínimos o completos para obtener ETags en respuesta. Los valores válidos son none
, minimal
y full
.
Solicitud
GET https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}/{view_item_id}?api-version={api-version}
Nota
Algunas implementaciones de cliente HTTP pueden volver a emitir automáticamente solicitudes en respuesta a 302 desde el servidor, pero normalmente quitan los encabezados de autorización de la solicitud. Dado que el encabezado Authorization es necesario para realizar solicitudes a ADC, debe asegurarse de que el encabezado Authorization todavía se proporciona al volver a emitir una solicitud a una ubicación de redireccionamiento especificada por ADC. A continuación se muestra el código de ejemplo que muestra esto mediante el objeto HttpWebRequest de .NET.
Parámetros URI
Nombre | Descripción | Tipo de datos |
---|---|---|
catalog_name | Nombre del catálogo o "DefaultCatalog" para usar el catálogo predeterminado. | String |
view_name | Nombre de la vista de recursos de datos. | String |
view_item_id | Identificador de un elemento View. | String |
api-version | Versión de la API. | String |
Ejemplo get
GET https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b...1be45ecd462a?api-version=2016-03-30
Encabezado
x-ms-client-request-id: 8091955f…8f5b4c0acede
Authorization: Bearer eXJ0eyAiOiJKV1QiLCJhbGciOi...
Accept: application/json;adc.metadata=full
Response
Códigos de estado
Código | Descripción |
---|---|
200 | Aceptar. La respuesta contiene la vista de recursos solicitada. |
Content-Type
application/json
Encabezado
x-ms-request-id: 1095e88c…caffabd6dabd
Content-Type: application/json; charset=utf-8
Cuerpo
{
"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"
}
}
}
]
}
}
Buscar
Busca en los recursos de datos en función de los términos de búsqueda proporcionados.
Solicitud
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
Algunas implementaciones de cliente HTTP pueden volver a emitir automáticamente solicitudes en respuesta a 302 desde el servidor, pero normalmente quitan los encabezados de autorización de la solicitud. Dado que el encabezado Authorization es necesario para realizar solicitudes a ADC, debe asegurarse de que el encabezado Authorization todavía se proporciona al volver a emitir una solicitud a una ubicación de redireccionamiento especificada por ADC. A continuación se muestra el código de ejemplo que muestra esto mediante el objeto HttpWebRequest de .NET.
Parámetros URI
Nombre | Descripción | Tipo de datos |
---|---|---|
catalog_name | Nombre del catálogo o "DefaultCatalog" para usar el catálogo predeterminado. | String |
api-version | Versión de la API. | String |
Parámetros de consulta
Nombre | Descripción | Tipo de datos |
---|---|---|
searchTerms | Necesario. Términos en los que buscar. | String |
facetas | Opcional: nombres de campo separados por comas para facetar los resultados. | String |
startPage | Página de inicio opcional de los resultados usados para paginación junto con el parámetro count. Los valores permitidos son mayores que 0, si se pasa un valor menor o igual que 0, se devuelve un error HTTP con el código de error 400. | String |
count | Número opcional de resultados deseados en una página (paginación). El valor predeterminado es 10. Los valores permitidos están en intervalo entre 1 y 100 inclusive. Si se pasa un valor fuera de este intervalo, se devuelve un error HTTP con el código de error 400. Para obtener la siguiente parte de los resultados de búsqueda, repita la solicitud pero aumente startPage en 1. | Entero |
vista | Opcional Obtiene la vista que el cliente quiere ver, por ahora la única opción admitida en DataSource. | String |
Ejemplo get
https://api.azuredatacatalog.com/catalogs/DefaultCatalog/search/search?searchTerms=My_Server&count=10&startPage=1&api-version=2016-03-30
Encabezado
x-ms-client-request-id: 546f053a…a1612f3a3d69
Authorization: Bearer eXJ0eyAiOiJKV1QiLCJhbGciOi...
Response
Códigos de estado
Código | Descripción |
---|---|
200 | Aceptar. Una operación correcta con el resultado de la búsqueda. |
Content-Type
application/json
Encabezado
x-ms-request-id: 0ab2e798…088223257ad2
Content-Length: 3926
Cuerpo
{
"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"
}]
}]
}]
}
Ejemplo
En este ejemplo se muestra cómo obtener un token de acceso de Azure AD y realizar una operación de búsqueda .
Nota Para buscar el nombre del catálogo, inicie sesión en Azure Data Catalog y elija Usuario. Verá el nombre del catálogo .
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;
}
}
}
Eliminar
Elimina un recurso de datos y todas las anotaciones (si las hay) adjuntas.
Admite el encabezado de If-Match opcional para el control de simultaneidad optimista. Solo se admite el formato débil, como W/"123456789".
Solicitud
DELETE https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}/{view_item_id}?api-version={api-version}
Nota
Algunas implementaciones de cliente HTTP pueden volver a emitir automáticamente solicitudes en respuesta a 302 desde el servidor, pero normalmente quitan los encabezados de autorización de la solicitud. Dado que el encabezado Authorization es necesario para realizar solicitudes a ADC, debe asegurarse de que el encabezado Authorization todavía se proporciona al volver a emitir una solicitud a una ubicación de redireccionamiento especificada por ADC. A continuación se muestra el código de ejemplo que muestra esto mediante el objeto HttpWebRequest de .NET.
Parámetros URI
Nombre | Descripción | Tipo de datos |
---|---|---|
catalog_name | Nombre del catálogo o "DefaultCatalog" para usar el catálogo predeterminado. | String |
view_name | Nombre de la vista de recursos de datos. | String |
view_item_id | Identificador de un elemento View. | String |
api-version | Versión de la API. | String |
Ejemplo de DELETE
DELETE https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0...1be45ecd462a?api-version=2016-03-30
Encabezado
x-ms-client-request-id: 59b68a46…46dc3ec8dcb8
Authorization: Bearer eXJ0eyAiOiJKV1QiLCJhbGciOi...
If-Match: W/"123456789"
Response
Códigos de estado
Código | Descripción |
---|---|
204 | NoContent NOTA: La semántica de la operación de eliminación es "delete if exists", por lo que si el recurso o la anotación no existen, se devuelve el código de estado correcto 204 (NoContent). |
412 | Error en la condición previa. La solicitud se canceló debido a la falta de coincidencia de ETag. |
Content-Type
application/json
Encabezado
x-ms-request-id: 664f86cf…5e512fa78e92
Actualizar anotación
Novedades una anotación.
Opcionalmente, los elementos pueden contener valores ETag para habilitar el control de simultaneidad optimista para ellos.
Solicitud
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
Algunas implementaciones de cliente HTTP pueden volver a emitir automáticamente solicitudes en respuesta a 302 desde el servidor, pero normalmente quitan los encabezados de autorización de la solicitud. Dado que el encabezado Authorization es necesario para realizar solicitudes a ADC, debe asegurarse de que el encabezado Authorization todavía se proporciona al volver a emitir una solicitud a una ubicación de redireccionamiento especificada por ADC. A continuación se muestra el código de ejemplo que muestra esto mediante el objeto HttpWebRequest de .NET.
Parámetros URI
Nombre | Descripción | Tipo de datos |
---|---|---|
catalog_name | Nombre del catálogo o "DefaultCatalog" para usar el catálogo predeterminado. | String |
view_name | Nombre de la vista de recursos de datos. | String |
view_item_id | Identificador de un elemento View. | String |
nested_view_name | Nombre de una vista anidada. | String |
nested_non_singleton_view_item_id | Identificador de un elemento de vista no singleton anidado. Debe proporcionarse para una vista que no sea singleton. | String |
api-version | Versión de la API. | String |
Ejemplo PUT para una vista de documentación singleton
PUT https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0...1be45ecd462a/documentation?api-version=2016-03-30
Encabezado
Content-Type: application/json; charset=utf-8
x-ms-client-request-id: 059692ee-...-57490fcec42c
Authorization: Bearer eXJ0eyAiOiJKV1QiLCJhbGciOi...
Esquema de cuerpo
Body:
{
"fromSourceSystem": false,
"etag": "123456789",
"content": "<new documentation content>",
"mimetype": "text",
}
Response
Códigos de estado
Código | Descripción |
---|---|
200 | Aceptar. Se actualizó una anotación existente. |
412 | Error en la condición previa. La solicitud se canceló debido a la falta de coincidencia de ETag en al menos un elemento. |
Content-Type
application/json
Encabezado
x-ms-request-id: 3b8668da…1558d0f407c0
Eliminar anotación
Elimina una anotación y todas las anotaciones anidadas (si las hay).
Admite el encabezado de If-Match opcional para el control de simultaneidad optimista. Solo se admite el formato débil, como W/"123456789".
Solicitud
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
Algunas implementaciones de cliente HTTP pueden volver a emitir automáticamente solicitudes en respuesta a 302 desde el servidor, pero normalmente quitan los encabezados de autorización de la solicitud. Dado que el encabezado Authorization es necesario para realizar solicitudes a ADC, debe asegurarse de que el encabezado Authorization todavía se proporciona al volver a emitir una solicitud a una ubicación de redireccionamiento especificada por ADC. A continuación se muestra el código de ejemplo que muestra esto mediante el objeto HttpWebRequest de .NET.
Parámetros URI
Nombre | Descripción | Tipo de datos |
---|---|---|
catalog_name | Nombre del catálogo o "DefaultCatalog" para usar el catálogo predeterminado. | String |
view_name | Nombre de la vista de recursos de datos. | String |
view_item_id | Id. de un elemento View. | String |
nested_view_name | Nombre de una vista anidada. | String |
nested_non_singleton_view_item_id | Identificador de un elemento de vista no singleton anidado. Debe proporcionarse para una vista que no sea singleton. | String |
api-version | Versión de la API. | String |
Ejemplo de DELETE
DELETE https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0-c187-49cc-8f30-1be45ecd462a/experts/22c3fa019b3945dc97143ebc3ad74cbf-1111fa019b3945dc97143ebc3ad74cbf?api-version=2016-03-30
Encabezado
x-ms-client-request-id: c8da5f08…67b203d77b2d
Authorization: Bearer eXJ0eyAiOiJKV1QiLCJhbGciOi...
If-Match: W/"123456789"
Response
Códigos de estado
Código | Descripción |
---|---|
204 | NoContent |
412 | Error de condición previa. La solicitud se canceló debido a la falta de coincidencia de ETag. |
Content-Type
application/json
Encabezado
x-ms-request-id: 276b9dc4…e5f7017805c