Compartir a través de


Hospedaje de puntos de conexión REST en data API Builder

Data API Builder proporciona una API web RESTful que permite acceder a tablas, vistas y procedimientos almacenados desde una base de datos conectada. Las entidades representan un objeto de base de datos en la configuración en tiempo de ejecución del generador de Data API. Se debe establecer una entidad en la configuración en tiempo de ejecución para que esté disponible en el punto de conexión de la API REST.

Llamada a un método de API rest

Para leer o escribir en un recurso (o entidad), cree una solicitud con el siguiente patrón:

{HTTP method} https://{base_url}/{rest-path}/{entity}

Nota

Todos los componentes de la ruta de acceso url, incluidas las entidades y los parámetros de consulta, distinguen mayúsculas de minúsculas.

Los componentes de una solicitud incluyen:

Descripción
{HTTP method} Método HTTP usado en la solicitud al generador de Data API
{base_url} Dominio (o servidor localhost y puerto) que hospeda una instancia de Data API Builder
{rest-path} Ruta de acceso base del punto de conexión de la API REST establecida en la configuración del entorno de ejecución.
{entity} Nombre del objeto de base de datos tal como se define en la configuración del entorno de ejecución.

Esta es una solicitud GET de ejemplo en la entidad book que reside en la base del punto de conexión REST /api en un entorno de desarrollo local localhost:

GET https:/localhost:5001/api/Book

Métodos HTTP

Data API Builder usa el método HTTP en la solicitud para determinar qué acción realizar en la entidad designada de solicitud. Los siguientes verbos HTTP están disponibles, en función de los permisos establecidos para una entidad determinada.

Método Descripción
GET Obtener cero, uno o varios elementos
POST Crear un nuevo elemento
PATCH Actualice un elemento con nuevos valores si existe uno. De lo contrario, cree un nuevo elemento.
PUT Reemplace un elemento por uno nuevo si existe uno. De lo contrario, cree un nuevo elemento.
DELETE Eliminar un elemento

Ruta de acceso de rest

La ruta de acceso de rest designa la ubicación de la API REST del generador de DATA API. La ruta de acceso se puede configurar en la configuración en tiempo de ejecución y el valor predeterminado es /api. Para obtener más información, consulte configuración de la ruta de acceso REST.

Entidad

Entity es la terminología que se usa para hacer referencia a un recurso de API REST en el generador de API de datos. De forma predeterminada, el valor de ruta de dirección URL de una entidad es el nombre de entidad definido en la configuración del entorno de ejecución. El valor de ruta de acceso de la dirección URL de REST de una entidad se puede configurar dentro de la configuración de REST de la entidad. Para obtener más información, consulte la configuración de entidades.

Formato del conjunto de resultados

El resultado devuelto es un objeto JSON con este formato:

{
    "value": []    
}

Los elementos relacionados con la entidad solicitada están disponibles en la matriz value. Por ejemplo:

{
  "value": [
    {
      "id": 1000,
      "title": "Foundation"
    },
    {
      "id": 1001,
      "title": "Foundation and Empire"
    }
  ]
}

Nota

De forma predeterminada, solo se devuelven los primeros 100 elementos.

OBTENER

Con el método GET puede recuperar uno o varios elementos de la entidad deseada.

Parámetros de dirección URL

Los puntos de conexión rest permiten recuperar un elemento mediante su clave principal mediante parámetros de dirección URL. En el caso de las entidades con una sola clave principal, el formato es sencillo:

GET /api/{entity}/{primary-key-column}/{primary-key-value}

Para recuperar un libro con un identificador de 1001, usaría:

GET /api/book/id/1001

Para las entidades con claves principales compuestas, donde se usa más de una columna para identificar de forma única un registro, el formato de dirección URL incluye todas las columnas de clave en secuencia:

GET /api/{entity}/{primary-key-column1}/{primary-key-value1}/{primary-key-column2}/{primary-key-value2}

Si una entidad de books tiene una clave compuesta que consta de id1 y id2, obtendría un libro específico como este:

GET /api/books/id1/123/id2/abc

Por ejemplo:

Este es el aspecto de una llamada:

### Retrieve a book by a single primary key
GET /api/book/id/1001

### Retrieve an author by a single primary key
GET /api/author/id/501

### Retrieve a book by compound primary keys (id1 and id2)
GET /api/books/id1/123/id2/abc

### Retrieve an order by compound primary keys (orderId and customerId)
GET /api/orders/orderId/789/customerId/456

### Retrieve a product by compound primary keys (categoryId and productId)
GET /api/products/categoryId/electronics/productId/987

### Retrieve a course by compound primary keys (departmentCode and courseNumber)
GET /api/courses/departmentCode/CS/courseNumber/101

Parámetros de consulta

Los puntos de conexión REST admiten los siguientes parámetros de consulta (distinguen mayúsculas de minúsculas) para controlar los elementos devueltos:

  • $select: devuelve solo las columnas seleccionadas.
  • $filter: filtra los elementos devueltos
  • $orderby: define cómo se ordenan los datos devueltos
  • $first y $after: devuelve solo los elementos de n principales.

Los parámetros de consulta se pueden usar juntos.

$select

El parámetro de consulta $select permitir especificar qué campos se deben devolver. Por ejemplo:

### Get all fields
GET /api/author

### Get only first_name field
GET /api/author?$select=first_name

### Get only first_name and last_name fields
GET /api/author?$select=first_name,last_name

Nota

Si alguno de los campos solicitados no existe o no es accesible debido a permisos configurados, se devuelve un 400 - Bad Request.

El parámetro de consulta $select, también conocido como "proyección", se usa para controlar el tamaño de los datos devueltos en una respuesta de API. Con solo las columnas necesarias, $select reduce el tamaño de la carga, lo que puede mejorar el rendimiento al minimizar el tiempo de análisis, reducir el uso del ancho de banda y acelerar el procesamiento de datos. Esta optimización se extiende a la base de datos. Allí solo se recuperan las columnas solicitadas.

$filter

El valor de la opción $filter es una expresión de predicado (una expresión que devuelve un resultado booleano) mediante los campos de la entidad. Solo los elementos en los que la expresión se evalúa como True se incluyen en la respuesta. Por ejemplo:

### Get books titled "Hyperion" (Equal to)
GET /api/book?$filter=title eq 'Hyperion'

### Get books not titled "Hyperion" (Not equal to)
GET /api/book?$filter=title ne 'Hyperion'

### Get books published after 1990 (Greater than)
GET /api/book?$filter=year gt 1990

### Get books published in or after 1990 (Greater than or equal to)
GET /api/book?$filter=year ge 1990

### Get books published before 1991 (Less than)
GET /api/book?$filter=year lt 1991

### Get books published in or before 1990 (Less than or equal to)
GET /api/book?$filter=year le 1990

### Get books published between 1980 and 1990 (Logical and)
GET /api/book?$filter=year ge 1980 and year le 1990

### Get books published before 1960 or titled "Hyperion" (Logical or)
GET /api/book?$filter=year le 1960 or title eq 'Hyperion'

### Get books not published before 1960 (Logical negation)
GET /api/book?$filter=not (year le 1960)

### Get books published in 1970 or later, and either titled "Foundation" or with more than 400 pages (Grouping)
GET /api/book?$filter=(year ge 1970 or title eq 'Foundation') and pages gt 400

Los operadores admitidos por la opción $filter son:

Operador Tipo Descripción Ejemplo
eq Comparación Igual title eq 'Hyperion'
ne Comparación No es igual title ne 'Hyperion'
gt Comparación Mayor que year gt 1990
ge Comparación Mayor o igual que year ge 1990
lt Comparación Menos que year lt 1990
le Comparación Menor o igual que year le 1990
and Lógico Lógico y year ge 1980 and year lt 1990
or Lógico Lógico o year le 1960 or title eq 'Hyperion'
not Lógico Negación lógica not (year le 1960)
( ) Agrupación Agrupación de precedencia (year ge 1970 or title eq 'Foundation') and pages gt 400

Nota

$filter es un argumento sensible a mayúsculas y minúsculas.

El parámetro de consulta $filter en Azure Data API Builder podría recordar a algunos usuarios de OData y eso se debe a que se inspiró directamente en las funcionalidades de filtrado de OData. La sintaxis es casi idéntica, lo que facilita a los desarrolladores que ya están familiarizados con OData para recoger y usar. Esta similitud fue intencionada, destinada a proporcionar una forma familiar y eficaz de filtrar los datos entre diferentes API.

$orderby

El valor del parámetro orderby es una lista separada por comas de expresiones usadas para ordenar los elementos.

Cada expresión del valor del parámetro orderby puede incluir el sufijo desc para solicitar un orden descendente, separados de la expresión por uno o varios espacios.

Por ejemplo:

### Order books by title in ascending order
GET /api/book?$orderby=title

### Order books by title in ascending order
GET /api/book?$orderby=title asc

### Order books by title in descending order
GET /api/book?$orderby=title desc

### Order books by year of publication in ascending order, then by title in ascending order
GET /api/book?$orderby=year asc, title asc

### Order books by year of publication in descending order, then by title in ascending order
GET /api/book?$orderby=year desc, title asc

### Order books by number of pages in ascending order, then by title in descending order
GET /api/book?$orderby=pages asc, title desc

### Order books by title in ascending order, then by year of publication in descending order
GET /api/book?$orderby=title asc, year desc

Nota

$orderBy es un argumento sensible a mayúsculas y minúsculas.

El parámetro de consulta $orderby es valioso para ordenar datos directamente en el servidor y también se puede gestionar fácilmente en el lado del cliente. Sin embargo, resulta útil cuando se combina con otros parámetros de consulta, como $filter y $first. El parámetro permite a la paginación mantener un conjunto de datos estable y predecible a medida que se pagina a través de colecciones grandes.

$first y $after

El parámetro de consulta $first limita el número de elementos devueltos en una sola solicitud. Por ejemplo:

GET /api/book?$first=5

Esta solicitud devuelve los cinco primeros libros. El parámetro de consulta $first en Azure Data API Builder es similar a la cláusula TOP en SQL. Ambos se usan para limitar el número de registros devueltos desde una consulta. Igual que TOP en SQL permite especificar la cantidad de filas que se van a recuperar, $first permite controlar el número de elementos devueltos por la API. $first resulta útil cuando desea capturar un pequeño subconjunto de datos, como los primeros 10 resultados, sin recuperar todo el conjunto de datos. La principal ventaja es la eficacia, ya que reduce la cantidad de datos transmitidos y procesados.

Nota

En el generador de API de datos de Azure, el número de filas devueltas de forma predeterminada está limitado por un valor en el archivo de configuración. Los usuarios pueden invalidar este límite mediante el parámetro $first para solicitar más filas, pero todavía hay un número máximo configurado de filas que se pueden devolver en general. Además, hay un límite en el total de megabytes que se pueden devolver en una única respuesta, que también se puede configurar.

Si hay más elementos disponibles más allá del límite especificado, la respuesta incluye una propiedad nextLink:

{
    "value": [],
    "nextLink": "dab-will-generate-this-continuation-url"
}

El nextLink se puede usar con el parámetro de consulta $after para recuperar el siguiente conjunto de elementos:

GET /api/book?$first={n}&$after={continuation-data}

Este enfoque de continuación usa la paginación basada en cursores. Un cursor único es una referencia a un elemento específico del conjunto de datos, que determina dónde continuar recuperando datos en el siguiente conjunto. A diferencia de la paginación de índices que usan desplazamientos o índices, la paginación basada en cursores no se basa en omitir registros. La continuación del cursor hace que sea más confiable con grandes conjuntos de datos o datos que cambian con frecuencia. En su lugar, garantiza un flujo uniforme y coherente de recuperación de datos iniciando exactamente donde se dejó la última consulta, en función del cursor proporcionado.

Por ejemplo:

### Get the first 5 books explicitly
GET /api/book?$first=5

### Get the next set of 5 books using the continuation token
GET /api/book?$first=5&$after={continuation-token}

### Get the first 10 books, ordered by title
GET /api/book?$first=10&$orderby=title asc

### Get the next set of 10 books after the first set, ordered by title
GET /api/book?$first=10&$after={continuation-token}&$orderby=title asc

### Get books without specifying $first (automatic pagination limit)
GET /api/book

### Get the next set of books using the continuation token without specifying $first
GET /api/book?$after={continuation-token}

EXPONER

Cree un nuevo elemento para la entidad especificada. Por ejemplo:

POST /api/book
Content-type: application/json

{
  "id": 2000,
  "title": "Do Androids Dream of Electric Sheep?"
}

La solicitud POST crea un nuevo libro. Se deben proporcionar todos los campos que no admiten valores NULL. Si se ejecuta correctamente el objeto de entidad completa, incluidos los campos NULL, se devuelve:

{
  "value": [
    {
      "id": 2000,
      "title": "Do Androids Dream of Electric Sheep?",
      "year": null,
      "pages": null
    }
  ]
}

PONER

PUT crea o reemplaza un elemento de la entidad especificada. El patrón de consulta es:

PUT /api/{entity}/{primary-key-column}/{primary-key-value}

Por ejemplo:

PUT /api/book/id/2001
Content-type: application/json

{  
  "title": "Stranger in a Strange Land",
  "pages": 525
}

Si hay un elemento con la clave principal especificada 2001, los datos proporcionados reemplazan completamente ese elemento. Si en su lugar no existe un elemento con esa clave principal, se crea un nuevo elemento.

En cualquier caso, el resultado es similar a:

{
  "value": [
    {
      "id": 2001,
      "title": "Stranger in a Strange Land",
      "year": null,
      "pages": 525
    }
  ]
}

Encabezado de solicitud HTTP de If-Match: *

El encabezado HTTP If-Match: * garantiza que la operación de actualización se realice solo si el recurso existe. Si el recurso no existe, se producirá un error en la operación con el código de estado HTTP: 404 Not Found. Si el encabezado If-Match se omite, el comportamiento predeterminado es realizar un upsert, que crea el recurso si aún no existe.

Ejemplo de :

PUT /api/Books/2001 HTTP/1.1
If-Match: *
Content-Type: application/json

{
  "title": "Stranger in a Strange Land",
  "pages": 525
}

Nota

Si especifica un valor distinto de * en el encabezado If-Match, data API Builder devolverá un error de 400 Bad Request, ya que no se admite la coincidencia basada en ETag.

PARCHE

PATCH crea o actualiza el elemento de la entidad especificada. Solo se ven afectados los campos especificados. No se verán afectados todos los campos especificados en el cuerpo de la solicitud. Si no existe un elemento con la clave principal especificada, se crea un nuevo elemento.

El patrón de consulta es:

PATCH /api/{entity}/{primary-key-column}/{primary-key-value}

Por ejemplo:

PATCH /api/book/id/2001
Content-type: application/json

{    
  "year": 1991
}

El resultado es algo parecido a:

{
  "value": [
    {
      "id": 2001,
      "title": "Stranger in a Strange Land",
      "year": 1991,
      "pages": 525
    }
  ]
}

El encabezado de solicitud HTTP If-Match: *

El encabezado HTTP If-Match: * garantiza que operación de actualización se realicesolo si el recurso existe. Si el recurso no existe, se producirá un error en la operación con el código de estado HTTP: 404 Not Found. Si el encabezado If-Match se omite, el comportamiento predeterminado es realizar un upsert, que crea el recurso si aún no existe.

Ejemplo de :

PATCH /api/Books/2001 HTTP/1.1
If-Match: *
Content-Type: application/json

{
    "year": 1991
}

Nota

Si especifica un valor distinto de * en el encabezado If-Match, data API Builder devolverá un error de 400 Bad Request, ya que no se admite la coincidencia basada en ETag.

BORRAR

DELETE elimina el elemento de la entidad especificada. El patrón de consulta es:

DELETE /api/{entity}/{primary-key-column}/{primary-key-value}

Por ejemplo:

DELETE /api/book/id/2001

Si se ejecuta correctamente, el resultado es una respuesta vacía con el código de estado 204.

Transacciones de base de datos para solicitudes de API REST

Para procesar solicitudes POST, PUT, PATCH y DELETE API; El generador de API de datos construye y ejecuta las consultas de base de datos en una transacción.

En la tabla siguiente se enumeran los niveles de aislamiento con los que se crean las transacciones para cada tipo de base de datos.

Tipo de base de datos Nivel de aislamiento Más información
Azure SQL (o) SQL Server Lectura confirmada Azure SQL
MySQL Lectura repetible mySQL
PostgreSQL Lectura confirmada PostgreSQL