Vytvořte požadavky HTTP a zpracujte chyby pro webové rozhraní API portálů
Interakce s webovým rozhraním API zahrnuje vytváření požadavků HTTP s požadovanými záhlavími a zpracovávání odpovědí HTTP, včetně veškerých chyb.
Důležité
- Aby tato funkce fungovala, musí být vaše verze portálu 9.3.3.x nebo novější.
Adresa URL webového rozhraní API a správa verzí
Vytvořte adresu URL webového rozhraní API pomocí formátu v následující tabulce.
Část | Description |
---|---|
Protokol | https:// |
Základní adresa URL | <URL portálu> |
Cesta webového rozhraní API | _api |
Resource | Logický název tabulky, kterou chcete použít |
Například použijte tento formát, když odkazujete na případ:
https://contoso.powerappsportals.com/_api/case
Všechny prostředky webového rozhraní API se budou řídit příslušnými oprávněními tabulky v kontextu s webovými rolemi.
Metody HTTP
Požadavky HTTP mohou používat různé druhy metod. Webová rozhraní API portálů však podporuji pouze metody v následující tabulce:
metoda | Využití |
---|---|
Získat | Použijte při načítání dat z tabulek. |
Zveřejnit | Použijte při vytváření záznamů. |
Oprava | Použijte při aktualizaci tabulek nebo při operacích upsert. |
Odstranění | Použijte při odstraňování záznamů nebo jednotlivých hodnot polí záznamů. |
Put | Použijte v omezených situacích k aktualizaci jednotlivých polí záznamů. |
Záhlaví HTTP
Webové rozhraní API podporuje pouze JSON. Každé záhlaví HTTP musí obsahovat:
- Hodnota záhlaví Přijmout typu application/json, i když se neočekává žádné tělo odpovědi.
- Pokud text požadavku obsahuje data JSON, musíte zahrnout záhlaví Content-Type s hodnotou
application/json
.
Aktuální verze OData je 4.0, ale budoucí verze mohou umožňovat nové funkce. Použijte následující syntaxi, abyste zajistili, že nebudou žádné nejasnosti ohledně verze OData, která bude v budoucnu použita na váš kód:
Syntaxe
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Příklad: Obálková funkce AJAX pro token CSRF
(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)
Příklad: Načtení dat tabulky
webapi.safeAjax({
type: "GET",
url: "/_api/contacts?$select=firstname,lastname",
contentType: "application/json",
success: function (res) {
console.log(res);
}
});
Příklad: Vytvoření dat tabulky
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"))
}
});
Příklad: Aktualizace dat tabulky
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);
}
});
Příklad: Odstranění dat tabulky
webapi.safeAjax({
type: "DELETE",
url: "/_api/accounts(00000000-0000-0000-0000-000000000001)",
contentType: "application/json",
success: function (res) {
console.log(res);
}
});
Vysvětlení stavových kódů
Každá odpověď na požadavek HTTP obsahuje stavový kód. Stavové kódy vrácené webovým rozhraním API portálů zahrnují následující:
Kód | Description | Type |
---|---|---|
200 OK | Očekávejte tuto odpověď, když vaše operace vrátí data v textu odpovědi. | Úspěch |
204 Chybí obsah | Očekávejte tuto odpověď, když vaše operace uspěje, ale nevrátí data v textu odpovědi. | Úspěch |
403 Zakázáno | Očekávejte tuto odpověď u následujících typů chyb:
|
Chyba klienta |
401 Neautorizováno | Očekávejte tuto odpověď u následujících typů chyb:
|
Chyba klienta |
413 Příliš velká datová část | Tuto odpověď očekávejte, pokud je délka požadavku příliš velká. | Chyba klienta |
400 Nepsrávný požadavek | Pokud je argument neplatný, očekávejte tuto odpověď. InvalidAttribute |
Chyba klienta |
404 Nenalezeno | Pokud zdroj neexistuje, očekávejte tuto odpověď. Tabulka není vystavena pro webové rozhraní API. |
Chyba klienta |
405 Nepovolená metoda | K této chybě dochází při nesprávné kombinaci metod a prostředků. Například nemůžete použít DELETE nebo PATCH na kolekci tabulek. Tato situace může nastat u následujících typů chyb:
|
Chyba klienta |
501 Není implementováno | Tuto odpověď očekávejte, pokud není implementována požadovaná operace. | Chyba serveru |
503 Nedostupná služba | Tuto odpověď očekávejte, když služba webového rozhraní API není k dispozici. | Chyba serveru |
Analýza chyb z odpovědi
Zvažte následující příklad odpovědi HTTP, která stále obsahuje vnitřní chybu:
{
"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.."
}
}
}
Kódy chyb
Kódy chyb jsou zobrazeny v hexadecimálním formátu pro všechny zpracované scénáře. V následující tabulce je uveden každý chybový kód s příslušným názvem a zprávou.
Kód chyby | Název chyby | Chybová zpráva |
---|---|---|
900400FF | NoAttributesForTableCreate | Žádné atributy pro akci Vytvořit tabulku |
90040100 | InvalidAttribute | Atribut {0} tabulky {1} nelze najít. |
90040101 | AttributePermissionIsMissing | Atribut {0} v tabulce {1} nemá povolené webové rozhraní API. |
90040102 | TablePermissionWriteIsMissingDuringUpdate | Nemáte oprávnění k aktualizaci entity {0}. |
90040103 | TablePermissionCreateIsMissing | Nemáte oprávnění k vytvoření entity {0}. |
90040104 | TablePermissionDeleteIsMissing | Nemáte oprávnění k odstranění entity {0). |
90040105 | TablePermissionAppendIsMissngDuringAssociationChange | Nemáte oprávnění k přidružení nebo zrušení přidružení tabulky {0} s {1}. |
90040106 | TablePermissionAppendToIsMissingDuringAssociationChange | Nemáte oprávnění k přidružení nebo zrušení přidružení tabulky {1} k {0}. |
90040107 | HttpAntiForgeryException | Token souboru cookie proti padělání a token pole formuláře se neshodují. |
90040109 | MissingPortalSessionCookie | Do metody, která vyvolala chybu, byl předán neplatný token relace. |
9004010C | ResourceDoesNotExists | Pro segment {0} nebyl nalezen zdroj. |
9004010D | CDSError | Došlo k chybě CDS. |
Odpověď na neošetřené chyby se stavovým kódem HTTP 500 vrátí chybu „Při zpracování požadavku došlo k neočekávané chybě“.