Problemen met het gebruik van Data API Builder voor Azure-databases oplossen
Dit artikel bevat oplossingen voor veelvoorkomende fouten die kunnen optreden wanneer u Data API Builder voor Azure-databases gebruikt.
Algemeen eindpunt: HTTP 400 'Ongeldige aanvraag' fout
In de volgende secties worden de oorzaken en oplossingen voor de HTTP 400-fout 'Ongeldige aanvraag' beschreven.
Ongeldig eindpunt voor data-API-opbouwfunctie
De basis van het URL-padonderdeel wordt toegewezen aan het REST- of GraphQL-eindpunt van de Data API Builder. Wanneer de basis van het URL-padonderdeel niet overeenkomt met de waarde die is ingesteld in de runtimeconfiguratie van de Data API Builder, retourneert Data API Builder een HTTP 400-fout 'Ongeldige aanvraag'.
U kunt de hoofdpaden voor de GraphQL- en REST-eindpunten configureren in de runtime
sectie van de runtimeconfiguratie van de Data API Builder. U moet de waarden gebruiken om de URL-paden voor de REST- en GraphQL-eindpunten te starten.
De volgende configuratiesets /api
zijn bijvoorbeeld het hoofdpad van het REST-eindpunt en /graphql
de hoofdmap van het GraphQL-eindpunt:
"runtime": {
"rest": {
"enabled": true,
"path": "/api"
},
"graphql": {
"allow-introspection": true,
"enabled": true,
"path": "/graphql"
},
"...": "...",
}
De waarden die u aan het begin van de URL-paden voor de REST- en GraphQL-eindpunten moet gebruiken, zijn dus:
/api/<entity>
/graphql
Notitie
Wanneer u data-API builder gebruikt met de functie Static Web Apps met behulp van de functie Databaseverbindingen, begint het URL-pad met /data-api
. U kunt na deze waarde de waarde van het gewenste eindpunt toevoegen. Bijvoorbeeld /data-api/api/<entity>
voor REST en /data-api/graphql
voor GraphQL.
Configuratieprobleem met de configuratie van statische Web Apps-databaseverbindingen
Wanneer u data-API builder gebruikt met de functie Static Web Apps Database Connections, krijgt u de foutmelding 'Statuscode antwoord geeft niet aan dat het is gelukt: 400 (Ongeldige aanvraag)' in de hoofdtekst van het antwoord:
{"Message":"{\u0022Message\u0022:\u0022Response status code does not indicate success: 400 (Bad Request).\u0022,\u0022ActivityId\u0022:\u0022<GUID>\u0022}","ActivityId":"<GUID>"}
Deze fout kan duiden op een probleem met de configuratie die u hebt opgegeven bij het koppelen van uw database.
Volg deze stappen om dit probleem op te lossen:
- Controleer of uw databasereferenties geldig zijn in een hulpprogramma zoals Azure Data Studio of SQL Server Management Studio (SSMS).
- Koppel de verbonden database los/koppel deze opnieuw.
Als de fout nog steeds optreedt, moet u Ervoor zorgen dat u Azure-services en -resources toegang geven tot deze server voor de uitzonderingen op de netwerkpagina van uw Azure Database-resource selecteert. Met deze optie configureert u de firewall om verbindingen toe te staan van IP-adressen die zijn toegewezen aan een Azure-service of -asset, inclusief verbindingen van abonnementen van andere klanten.
REST-eindpunt: HTTP 404-fout 'Niet gevonden'
Als de aangevraagde URL verwijst naar een route die niet is gekoppeld aan een entiteit, wordt een HTTP 404-fout geretourneerd. Standaard is de naam van de entiteit ook de routenaam. Als u bijvoorbeeld de voorbeeldentiteit Todo
in het configuratiebestand configureert, zoals in het volgende voorbeeld:
"Todo": {
"source": "dbo.todos",
"...": "..."
}
Vervolgens is de Todo
entiteit bereikbaar via de volgende route:
/<rest-route>/Todo
Als u de rest.path
eigenschap in de entiteitsconfiguratie opgeeft, todo
zoals wordt weergegeven in het volgende voorbeeld:
"Todo": {
"source": "dbo.todos",
"rest": {
"path": "todo"
},
"...": "..."
}
Vervolgens is todo
de URL-route voor de Todo
entiteit, waarbij alle kleine letters overeenkomen met de exacte waarde die is gedefinieerd in de runtimeconfiguratie:
/<rest-route>/todo
GraphQL-eindpunt: HTTP 400-fout 'Ongeldige aanvraag'
Een GraphQL-aanvraag resulteert in een HTTP 400-fout 'Ongeldige aanvraag' telkens wanneer de GraphQL-aanvraag onjuist is samengesteld. Dit kan het gevolg zijn van een niet-bestaand entiteitsveld of een verkeerd gespelde entiteitsnaam. Data API Builder retourneert een beschrijvende fout en foutdetails in de nettolading van het antwoord.
Wanneer u een GET
aanvraag naar het GraphQL-eindpunt verzendt, wordt in de antwoordtekst van de geretourneerde fout aangegeven: 'De parameterquery of de parameter-id moet worden ingesteld'. Zorg ervoor dat u uw GraphQL-aanvragen verzendt met behulp van HTTP POST
.
GraphQL-eindpunt: HTTP 404-fout 'Niet gevonden'
Zorg ervoor dat de GraphQL-aanvraag wordt verzonden naar het geconfigureerde GraphQL-eindpunt met behulp van de HTTP-methode POST
. De GraphQL-eindpuntroute is /graphql
standaard .
GraphQL-eindpunt: 'Het objecttype Query moet ten minste één veld definiëren om geldig te zijn'
Wanneer het opstarten van de Data API Builder een GraphQL-schema niet kan genereren op basis van uw runtimeconfiguratie, ontvangt u het foutbericht:
Het objecttype Query moet ten minste één veld definiëren om geldig te zijn.
Voor de GraphQL-specificatie moet ten minste één Query
object worden gedefinieerd in het GraphQL-schema. U moet controleren of uw runtimeconfiguratie voldoet aan een van de volgende voorwaarden:
De
read
actie wordt gedefinieerd voor ten minste één GraphQL-entiteit. GraphQL is standaard ingeschakeld voor entiteiten, dus zorg ervoor dat u deze beperking niet toepast op een entiteit die is geconfigureerd met{"graphql": false}
.Wanneer u alleen opgeslagen procedures beschikbaar maakt, definieert
{ "graphql": { "operation": query" } }
u op ten minste één entiteit voor opgeslagen procedures, waardoor het graphQL-bewerkingstypemutation
van de standaard opgeslagen procedure wordt overschreven.U moet ten minste één opgeslagen procedure hebben die alleen wordt gelezen en de gegevens niet wijzigt. Anders mislukt het genereren van GraphQL-schema's vanwege een leeg
query
veld in het schema.
GraphQL-eindpunt: Introspection werkt niet met het GraphQL-eindpunt
Hulpprogramma's die GraphQL ondersteunen, maken normaal gesproken gebruik van introspectie voor GraphQL-schema's zonder dat hiervoor extra instellingen nodig zijn. Zorg ervoor dat u de runtimeconfiguratie-eigenschap allow-introspection
true
instelt op in de runtime.graphql
configuratiesectie. Bijvoorbeeld:
"runtime": {
"...": "...",
"graphql": {
"allow-introspection": true,
"enabled": true,
"path": "/graphql"
},
"...": "..."
}
GraphQL-eindpunt: "De mutatiebewerking <operation_name> is geslaagd, maar de huidige gebruiker is niet gemachtigd om het antwoord te bekijken vanwege een gebrek aan leesmachtigingen"
Voor een GraphQL-mutatiebewerking om een geldig antwoord te ontvangen, moeten leesmachtigingen worden geconfigureerd naast het respectieve mutatiebewerkingstype : maken, bijwerken en verwijderen. Zoals de fout al aangeeft, is de mutatiebewerking (maken/bijwerken/verwijderen) geslaagd in de databaselaag, maar het gebrek aan leesmachtiging heeft ertoe geleid dat data-API builder een foutbericht retourneert. Zorg er dus voor dat u leesmachtigingen configureert in de rol Anoniem of de rol waarmee u de mutatiebewerking wilt uitvoeren.
Algemene fout: HTTP 500-fout geretourneerd door aanvragen
HTTP 500-fouten geven aan dat Data API Builder niet goed kan werken op de back-enddatabase. Zorg dat aan de volgende voorwaarden wordt voldaan:
- Data API Builder kan nog steeds verbinding maken met de geconfigureerde database.
- De databaseobjecten die door Data API Builder worden gebruikt, zijn nog steeds beschikbaar en toegankelijk.
Als u wilt toestaan dat Data API Builder specifieke databasefouten in antwoorden retourneert, stelt u de runtime.host.mode
configuratie-eigenschap development
in op:
"runtime": {
[...]
"host": {
"mode": "development",
[...]
}
}
Data API Builder wordt standaard uitgevoerd met runtime.host.mode
die is ingesteld op production
. In production
de modus retourneert Data API Builder geen gedetailleerde fouten in de nettolading van het antwoord.
In beide development
modi production
schrijft Data API Builder gedetailleerde fouten naar de console om u te helpen bij het oplossen van problemen.
Algemene fouten vanwege niet-geverifieerde en niet-geautoriseerde aanvragen
HTTP 401 -fout 'Niet geautoriseerd'
HTTP 401-fouten treden op wanneer voor het eindpunt en de entiteit die wordt geopend verificatie is vereist en de aanvrager geen geldige verificatiemetagegevens in de aanvraag opgeeft.
Wanneer u Data API Builder configureert voor het gebruik van Microsoft Entra ID-verificatie, resulteren uw aanvragen in HTTP 401-fouten wanneer het opgegeven bearer-token (toegang) ongeldig is. Een toegangstoken kan om verschillende redenen ongeldig zijn. Hier volgen een paar van deze manieren:
- Het toegangstoken is verlopen.
- Het toegangstoken is niet bedoeld voor de API van de Data API Builder (verkeerde doelgroep voor toegangstokens).
- Het toegangstoken wordt niet gemaakt door de verwachte instantie (ongeldige verlener van toegangstokens).
Als u deze fout wilt oplossen, moet u aan de volgende voorwaarden voldoen:
U genereert een toegangstoken met behulp van de
issuer
waarde die is gedefinieerd in deauthentication
sectie van de runtimeconfiguratie.Uw toegangstoken wordt gegenereerd voor de
audience
waarde die is gedefinieerd in deauthentication
sectie van de runtimeconfiguratie.
Hier volgt een voorbeeldconfiguratie:
"authentication": {
"provider": "AzureAD",
"jwt": {
"issuer": "https://login.microsoftonline.com/24c24d79-9790-4a32-bbb4-a5a5c3ffedd5/v2.0/",
"audience": "b455fa3c-15fa-4864-8bcd-88fd83d686f3"
}
}
U moet een geldig token genereren voor de gedefinieerde doelgroep. Wanneer u de Azure CLI gebruikt, kunt u een toegangstoken ophalen door de doelgroep op te geven in de resource
parameter:
az account get-access-token --resource "b455fa3c-15fa-4864-8bcd-88fd83d686f3"
HTTP 403-fout Verboden
Als u een geverifieerde aanvraag verzendt met behulp van static Web Apps-integratie of Microsoft Entra-id, krijgt u mogelijk een HTTP 403-fout 'Verboden'. Deze fout geeft aan dat u probeert een rol te gebruiken die niet bestaat in het configuratiebestand.
Deze fout treedt op wanneer:
U geeft
X-MS-API-ROLE
geen HTTP-header op die een rolnaam opgeeft.Omdat geverifieerde aanvragen standaard worden uitgevoerd in de context van de systeemrol
authenticated
, is dit scenario alleen van toepassing wanneer u een niet-systeemrol gebruikt (nietauthenticated
nochanonymous
).De rol die u in de
X-MS-API-ROLE
header definieert, is niet geconfigureerd in het runtimeconfiguratiebestand van de Data API Builder.De rol die u in de
X-MS-API-ROLE
koptekst definieert, komt niet overeen met de rol in uw toegangstoken.
In het volgende runtimeconfiguratiebestand is de rol role1
bijvoorbeeld gedefinieerd, dus u moet een X-MS-API-ROLE
HTTP-header met de waarde role1
opgeven.
Notitie
De overeenstemmende rolnamen zijn hoofdlettergevoelig.
"Todo": {
"role": "role1",
"actions": [ "*" ]
}
Verwijzingen
- Problemen met de installatie van Data API Builder voor Azure-databases oplossen
- Bekende problemen in de GitHub-opslagplaats azure/data-api-builder
Volgende stap
Als uw probleem niet is opgelost, geeft u feedback of meldt u dit in de discussies over data-api-builder.
Contacteer ons voor hulp
Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Azure-feedbackcommunity.