Skapa HTTP-förfrågningar och hantera fel för portalwebb-API
Att samverka med webb-API inkluderar att HTTP-begäran skapas med obligatoriska rubriker och hantering av HTTP-svar, inklusive eventuella fel.
Viktigt!
- Portalversionen måste vara 9.3.3.x eller senare för att den här funktionen ska fungera.
URL och version för webb-API
Konstruera webb-API-adressen med hjälp av formatet i följande tabell.
Delvis | Description |
---|---|
Protokoll | https:// |
Bas-URL | <portal URL> |
Sökväg till Webb-API | _api |
Resurs | Logiskt namn på tabellen du vill använda |
Använd t.ex. följande format när du refererar ett ärende:
https://contoso.powerappsportals.com/_api/case
Alla webb-API-resurser följer respektive tabellbehörighet i kontexten med webbroller.
HTTP-metoder
HTTP-begäran kan använda olika typer av metoder. Webb-API för portaler stöder dock endast metoderna i följande tabell:
Metod | Användning |
---|---|
Hämta | Används när data hämtas från tabeller. |
Publicera | Används när poster skapas. |
Korrigering | Används när du uppdaterar tabeller eller gör upsert-åtgärder. |
Delete | Används när du tar bort poster eller enskilda fältvärden för poster. |
Put | Används i begränsade situationer för att uppdatera enskilda postfält. |
HTTP-rubriker
Webb-API:t stöder endast JSON. Varje HTTP-rubrik måste innehålla:
- Rubrikvärdet Acceptera förprogram/json, även när ingen svarstext förväntas.
- Om förfrågan innehåller JSON-data i begärandetexten måste du ha med rubriken Innehållstyp med värdet
application/json
.
Den aktuella OData-versionen är 4.0, men framtida versioner kan tillåta nya funktioner. Använd följande syntax för att säkerställa att OData-versionen inte är tvetydig och att den kommer att användas för din kod i framtiden:
Syntax
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Exempel: funktionen wrapper AJAX för CSRF-token
(function(webapi, $){
function safeAjax(ajaxOptions) {
var deferredAjax = $.Deferred();
shell.getTokenDeferred().done(function (token) {
// add headers for ajax
if (!ajaxOptions.headers) {
$.extend(ajaxOptions, {
headers: {
"__RequestVerificationToken": token
}
});
} else {
ajaxOptions.headers["__RequestVerificationToken"] = token;
}
$.ajax(ajaxOptions)
.done(function(data, textStatus, jqXHR) {
validateLoginSession(data, textStatus, jqXHR, deferredAjax.resolve);
}).fail(deferredAjax.reject); //ajax
}).fail(function () {
deferredAjax.rejectWith(this, arguments); // on token failure, pass the token ajax and args
});
return deferredAjax.promise();
}
webapi.safeAjax = safeAjax;
})(window.webapi = window.webapi || {}, jQuery)
Exempel: Hämta tabelldata
webapi.safeAjax({
type: "GET",
url: "/_api/contacts?$select=firstname,lastname",
contentType: "application/json",
success: function (res) {
console.log(res);
}
});
Exempel: Skapa tabelldata
webapi.safeAjax({
type: "POST",
url: "/_api/accounts",
contentType: "application/json",
data: JSON.stringify({
"name": "Sample Account"
}),
success: function (res, status, xhr) {
console.log("entityID: "+ xhr.getResponseHeader("entityid"))
}
});
Exempel: Uppdatera tabelldata
webapi.safeAjax({
type: "PATCH",
url: "/_api/accounts(00000000-0000-0000-0000-000000000001)",
contentType: "application/json",
data: JSON.stringify({
"name": "Sample Account - Updated"
}),
success: function (res) {
console.log(res);
}
});
Exempel: Ta bort tabelldata
webapi.safeAjax({
type: "DELETE",
url: "/_api/accounts(00000000-0000-0000-0000-000000000001)",
contentType: "application/json",
success: function (res) {
console.log(res);
}
});
Identifiera statuskoder
Varje svar på en HTTP-begäran omfattar en statuskod. Statuskoder som returneras av portals webb-API omfattar följande:
Kod | Description | Type |
---|---|---|
200 OK | Förvänta dig det här svaret om din åtgärd ska returnera data i svarstexten. | Genomfört |
204 inget innehåll | Förvänta dig det här svaret om din åtgärd lyckas men inte returnerar data i svarstexten. | Genomfört |
403 Förbjuden | Detta svar förväntas för följande typer av fel:
|
Klientfel |
401 Ej auktoriserad | Detta svar förväntas för följande typer av fel:
|
Klientfel |
413 nyttolast är för stor | Förvänta dig det här svaret när längden på begäran är för stor. | Klientfel |
400 BadRequest | Förvänta dig svaret när ett argument är ogiltigt. InvalidAttribute |
Klientfel |
404 kunde inte hittas | Det här svaret förväntas när resursen inte finns. Tabellen visas inte för webb-API. |
Klientfel |
405 metoden är inte tillåten | Det här felet uppstår för felaktiga metod- och resurskombinationer. Du kan till exempel inte använda DELETE eller PATCH på en samling med tabeller. Denna situation kan ske för följande typer av fel:
|
Klientfel |
501 ej implementerat | Det här svaret förväntas när en begärd åtgärd inte implementeras. | Serverfel |
503 Tjänsten är inte tillgänglig | Förvänta dig svaret när webb-API-tjänsten inte är tillgänglig. | Serverfel |
Parsningsfel från svaret
Tänk på följande exempel-HTTP på svar som fortfarande innehåller det interna felet:
{
"error":{
"code": "This code is not related to the http status code and is frequently empty",
"message": "A message describing the error",
"cdscode": "Dataverse error code",
"innererror": {
"code": "800xxxx",
"message": "A message describing the error. This is frequently the same as the outer message.."
}
}
}
Felkoder
Felkoder visas i hexadecimalt format för alla hanterade scenarier. I följande tabell visas varje felkod med respektive namn och meddelande.
Felkod | Felnamn | Felmeddelande |
---|---|---|
900400FF | NoAttributesForTableCreate | Det finns inga attribut för åtgärden Skapa tabell. |
90040100 | InvalidAttribute | Attributet {0} kan inte hittas för tabellen {1}. |
90040101 | AttributePermissionIsMissing | Attributet {0} i tabellen {1} är inte aktiverat för webb-API:et. |
90040102 | TablePermissionWriteIsMissingDuringUpdate | Du har inte behörighet att uppdatera entiteten {0}. |
90040103 | TablePermissionCreateIsMissing | Du har inte behörighet att skapa entiteten {0}. |
90040104 | TablePermissionDeleteIsMissing | Du har inte behörighet att ta bort entiteten {0). |
90040105 | TablePermissionAppendIsMissngDuringAssociationChange | Du har inte behörighet att associera eller ta bort associationen till tabellen {0} med {1}. |
90040106 | TablePermissionAppendToIsMissingDuringAssociationChange | Du har inte behörighet att associera eller ta bort associationen till tabellen {1} till {0}. |
90040107 | HttpAntiForgeryException | Cookie-token för antiförfalskning för formulärfältets token överensstämmer inte. |
90040109 | MissingPortalSessionCookie | En ogiltig sessionstoken angavs i utlösningsmetoden. |
9004010C | ResourceDoesNotExists | Det gick inte att hitta resursen för segmentet "{0}". |
9004010D | CDSError | Ett CDS-fel inträffade. |
Svar på ohanterade fel med HTTP-statuskod 500 kommer att returnera felet "Ett oväntat fel inträffade när förfrågan bearbetades".