Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se proporcionan soluciones a errores comunes que pueden producirse al usar Data API Builder para bases de datos de Azure.
Punto de conexión genérico: error HTTP 400 "Solicitud incorrecta"
En las secciones siguientes se describen las causas y soluciones al error HTTP 400 "Solicitud incorrecta".
Punto de conexión de Generador de API de datos no válido
La base del componente de ruta de acceso url se asigna al punto de conexión REST o GraphQL del generador de data API. Cuando la base del componente de ruta de acceso URL no coincide con el valor establecido en la configuración en tiempo de ejecución del generador de data API, data API builder devuelve un error HTTP 400 "Solicitud incorrecta".
Puede configurar las rutas de acceso raíz para los puntos de conexión de GraphQL y REST en la runtime sección de la configuración del entorno de ejecución del generador de API de datos. Debe usar los valores para iniciar las rutas de acceso de dirección URL para los puntos de conexión REST y GraphQL.
Por ejemplo, la configuración siguiente establece /api como la ruta de acceso raíz del punto de conexión REST y /graphql como la raíz del punto de conexión de GraphQL:
"runtime": {
"rest": {
"enabled": true,
"path": "/api"
},
"graphql": {
"allow-introspection": true,
"enabled": true,
"path": "/graphql"
},
"...": "...",
}
Por lo tanto, los valores que debe usar al principio de las rutas de acceso de dirección URL para los puntos de conexión REST y GraphQL son:
/api/<entity>
/graphql
Nota:
Cuando se usa data API Builder con Static Web Apps mediante la característica Conexiones de base de datos, la ruta de acceso url comienza por /data-api. Puede agregar el valor del punto de conexión deseado después de este valor. Por ejemplo, /data-api/api/<entity> para REST y /data-api/graphql para GraphQL.
Problema de configuración de conexiones de base de datos de Static Web Apps
Cuando se usa data API Builder con la característica Conexiones de base de datos de Static Web Apps, se produce el error "El código de estado de respuesta no indica que se ha realizado correctamente: 400 (solicitud incorrecta)" en el cuerpo de la respuesta:
{"Message":"{\u0022Message\u0022:\u0022Response status code does not indicate success: 400 (Bad Request).\u0022,\u0022ActivityId\u0022:\u0022<GUID>\u0022}","ActivityId":"<GUID>"}
Este error podría indicar un problema con la configuración proporcionada al vincular la base de datos.
Para resolver el problema, siga estos pasos:
- Compruebe que las credenciales de la base de datos son válidas en una herramienta como Azure Data Studio o SQL Server Management Studio (SSMS).
- Desvincular o volver a vincular la base de datos conectada.
Si sigue teniendo el error, asegúrese de seleccionar Permitir que los servicios y recursos de Azure accedan a este servidor para las excepciones de la página de redes del recurso de Azure Database. Esta opción configura el firewall para permitir conexiones desde direcciones IP asignadas a cualquier servicio o recurso de Azure, incluidas las conexiones de otras suscripciones de clientes.
Punto de conexión REST: error HTTP 404 "No encontrado"
Si la dirección URL solicitada apunta a una ruta que no está asociada a ninguna entidad, se devuelve un error HTTP 404. De forma predeterminada, el nombre de la entidad también es el nombre de ruta. Por ejemplo, si configura la Todo entidad de ejemplo en el archivo de configuración como en el ejemplo siguiente:
"Todo": {
"source": "dbo.todos",
"...": "..."
}
A continuación, se puede acceder a la Todo entidad a través de la siguiente ruta:
/<rest-route>/Todo
Si especifica la rest.path propiedad en la configuración todode entidad en , como se muestra en el ejemplo siguiente:
"Todo": {
"source": "dbo.todos",
"rest": {
"path": "todo"
},
"...": "..."
}
A continuación, la ruta de dirección URL de la Todo entidad es todo, con todos los caracteres en minúsculas que coinciden con el valor exacto definido en la configuración del entorno de ejecución:
/<rest-route>/todo
Punto de conexión de GraphQL: error HTTP 400 "Solicitud incorrecta"
Una solicitud de GraphQL produce un error HTTP 400 "Solicitud incorrecta" cada vez que la solicitud graphQL se construye incorrectamente. Puede deberse a un campo de entidad no existente o a un nombre de entidad mal escrito. El generador de API de datos devuelve un error descriptivo y detalles de error en la carga de respuesta.
Al enviar una GET solicitud al punto de conexión de GraphQL, el cuerpo de respuesta del error devuelto indica que se debe establecer la consulta de parámetros o el identificador de parámetro. Asegúrese de enviar las solicitudes de GraphQL mediante HTTP POST.
Punto de conexión de GraphQL: error HTTP 404 "No encontrado"
Asegúrese de que la solicitud de GraphQL se envía al punto de conexión de GraphQL configurado mediante el método HTTP POST . De forma predeterminada, la ruta del punto de conexión de GraphQL es /graphql.
Punto de conexión de GraphQL: "La consulta de tipo de objeto tiene que definir al menos un campo para que sea válido"
Cuando el inicio del generador de Data API no puede generar un esquema graphQL basado en la configuración del entorno de ejecución, recibirá el mensaje de error:
El tipo de objeto Query tiene que definir al menos un campo para que sea válido.
La especificación GraphQL requiere que se defina al menos un Query objeto en el esquema graphQL. Debe validar que la configuración del entorno de ejecución cumple una de las condiciones siguientes:
La
readacción se define para al menos una entidad habilitada para GraphQL. GraphQL está habilitado en entidades de forma predeterminada, por lo que debe asegurarse de que no aplica esta mitigación a una entidad configurada con{"graphql": false}.Cuando solo expone procedimientos almacenados, defina
{ "graphql": { "operation": query" } }en al menos una entidad de procedimiento almacenado, que invalida el procedimiento almacenado predeterminado Tipo de operaciónmutationGraphQL .Debe tener al menos un procedimiento almacenado que solo lea y no modifique los datos. De lo contrario, se produce un error en la generación de esquemas de GraphQL debido a un campo vacío
queryen el esquema.
Punto de conexión de GraphQL: la introspección no funciona con el punto de conexión de GraphQL
Las herramientas que admiten GraphQL normalmente usan la introspección de esquema de GraphQL sin necesidad de configuración adicional. Asegúrese de establecer la propiedad allow-introspectiontrue de configuración en tiempo de ejecución en en la runtime.graphql sección de configuración. Por ejemplo:
"runtime": {
"...": "...",
"graphql": {
"allow-introspection": true,
"enabled": true,
"path": "/graphql"
},
"...": "..."
}
Punto de conexión de GraphQL: "La operación <de mutación operation_name> se realizó correctamente, pero el usuario actual no está autorizado para ver la respuesta debido a la falta de permisos de lectura"
Para que una operación de mutación de GraphQL reciba una respuesta válida, los permisos de lectura deben configurarse además del tipo de operación de mutación correspondiente: crear, actualizar y eliminar. Como sugiere el error, la operación de mutación (create/update/delete) se realizó correctamente en la capa de base de datos, pero la falta de permiso de lectura provocó que el generador de Data API devuelva un mensaje de error. Por lo tanto, asegúrese de configurar permisos de lectura en el rol "Anónimo" o en el rol con el que desea ejecutar la operación de mutación.
Error general: error HTTP 500 devuelto por solicitudes
Los errores HTTP 500 indican que Data API Builder no puede funcionar correctamente en la base de datos back-end. Asegúrese de cumplir las siguientes condiciones:
- Data API Builder todavía puede conectarse a la base de datos configurada.
- Los objetos de base de datos usados por data API Builder siguen estando disponibles y accesibles.
Para permitir que el generador de Data API devuelva errores de base de datos específicos en las respuestas, establezca la runtime.host.mode propiedad developmentde configuración en :
"runtime": {
[...]
"host": {
"mode": "development",
[...]
}
}
De forma predeterminada, el generador de API de datos se ejecuta con ese valor establecido runtime.host.modeen production . En production modo, data API builder no devuelve errores detallados en la carga de respuesta.
En ambos development modos y production , Data API Builder escribe errores detallados en la consola para ayudar con la solución de problemas.
Errores generales debidos a solicitudes no autenticadas y no autorizadas
Error http 401 "no autorizado"
Los errores HTTP 401 se producen cuando el punto de conexión y la entidad a los que se accede requieren autenticación y el solicitante no proporciona metadatos de autenticación válidos en su solicitud.
Al configurar Data API Builder para que use la autenticación de Id. de Microsoft Entra, las solicitudes producen errores HTTP 401 cuando el token de portador (acceso) proporcionado no es válido. Un token de acceso puede no ser válido por muchas razones. Estas son algunas de ellas:
- El token de acceso ha expirado.
- El token de acceso no está pensado para la API del generador de Data API (audiencia incorrecta del token de acceso).
- La entidad esperada no crea el token de acceso (emisor de tokens de acceso no válido).
Para resolver este error, asegúrese de cumplir las condiciones siguientes:
Se genera un token de acceso mediante el
issuervalor definido en la sección de laauthenticationconfiguración en tiempo de ejecución.El token de acceso se genera para el
audiencevalor definido en la sección de laauthenticationconfiguración en tiempo de ejecución.
Esta es una configuración de ejemplo:
"authentication": {
"provider": "AzureAD",
"jwt": {
"issuer": "https://login.microsoftonline.com/24c24d79-9790-4a32-bbb4-a5a5c3ffedd5/v2.0/",
"audience": "b455fa3c-15fa-4864-8bcd-88fd83d686f3"
}
}
Debe generar un token válido para la audiencia definida. Al usar la CLI de Azure, puede obtener un token de acceso especificando la audiencia en el resource parámetro :
az account get-access-token --resource "b455fa3c-15fa-4864-8bcd-88fd83d686f3"
Error HTTP 403 "Prohibido"
Si envía una solicitud autenticada mediante la integración de Static Web Apps o el identificador de Microsoft Entra, es posible que reciba un error HTTP 403 "Prohibido". Este error indica que intenta usar un rol que no existe en el archivo de configuración.
Este error se produce cuando:
No se proporciona un
X-MS-API-ROLEencabezado HTTP que especifica un nombre de rol.Dado que las solicitudes autenticadas se ejecutan en el contexto del rol
authenticateddel sistema de forma predeterminada, este escenario solo se aplica cuando se usa un rol que no es de sistema (no niauthenticatedanonymous).El rol que defina en el
X-MS-API-ROLEencabezado no está configurado en el archivo de configuración en tiempo de ejecución del generador de DATA API.El rol que defina en el
X-MS-API-ROLEencabezado no coincide con el rol del token de acceso.
Por ejemplo, en el siguiente archivo de configuración en tiempo de ejecución, se define el rol role1 , por lo que debe proporcionar un X-MS-API-ROLE encabezado HTTP con el valor role1.
Nota:
La coincidencia de nombres de rol distingue entre mayúsculas y minúsculas.
"Todo": {
"role": "role1",
"actions": [ "*" ]
}
Referencias
- Solución de problemas de instalación de Data API Builder para bases de datos de Azure
- Problemas conocidos en el repositorio de GitHub Azure/data-api-builder
Paso siguiente
Si el problema no se resuelve, proporcione comentarios o notifiquelo en los debates de data-api-builder.