Sastavite HTTP zahteve i rukujte greškama za Web API-je portala
Napomena
Od 12. oktobra 2022. Power Apps portali postaju Power Pages. Više informacija: Usluga Microsoft Power Pages je sada opštedostupna (blog)
Uskoro ćemo migrirati i objediniti dokumentaciju o Power Apps portalima sa dokumentacijom o usluzi Power Pages.
Interakcija sa Web API-jem uključuje sastavljanje HTTP zahteva sa potrebnim zaglavljima i rukovanje HTTP odgovorima, uključujući sve greške.
Važno
- Verzija vašeg portala mora biti 9.3.3.x ili novija da bi ova funkcija mogla da funkcioniše.
URL adresa i verzije za Web API
Sastavite URL adresu Web API-ja korišćenjem formata u sledećoj tabeli.
Deo | Opis |
---|---|
Protokol | https:// |
Osnovna URL adresa | <portal URL> |
Putanja Web API-ja | _api |
Resurs | Logičko ime tabele koju želite da koristite |
Na primer, koristite ovaj format kada upućujete na predmet:
https://contoso.powerappsportals.com/_api/case
Svi resursi Web API-ja će slediti odgovarajuće dozvole za tabele portala u kontekstu veb-uloga.
HTTP metode
HTTP zahtevi mogu da koriste različite vrste metoda. Međutim, Web API za portale podržava samo metode iz sledeće tabele:
Način | Iskorišćenost |
---|---|
Počnite | Koristite ih prilikom preuzimanja podataka iz tabela. |
Post | Koristite prilikom kreiranja zapisa. |
Program za krpljenje | Koristite kada ažurirate tabele ili radite upsert operacije. |
Izbrisi | Koristite ih prilikom brisanja zapisa ili pojedinačnih vrednosti polja zapisa. |
Put | Koristite ga u ograničenim situacijama za ažuriranje pojedinačnih polja zapisa. |
HTTP zaglavlja
Web API podržava samo JSON. Svako HTTP zaglavlje mora da sadrži:
- Vrednost zaglavlja Accept za application/json, čak i kada se ne očekuje telo odgovora.
- Ako zahtev uključuje JSON podatke u telu zahteva, morate da uključite zaglavlje Content-Type sa vrednošću
application/json
.
Trenutna verzija OData je 4.0, ali buduće verzije mogu dozvoliti nove mogućnosti. Koristite sledeću sintaksu kako biste bili sigurni da neće biti dvosmislenosti oko OData verzije koja će se ubuduće primenjivati na vaš kôd:
Sintaksa
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Primer: Okvir AJAX funkcije za 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)
Primer: Preuzimanje podataka tabele
webapi.safeAjax({
type: "GET",
url: "/_api/contacts?$select=firstname,lastname",
contentType: "application/json",
success: function (res) {
console.log(res);
}
});
Primer: Kreiranje podataka tabele
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"))
}
});
Primer: Ažuriranje podataka tabele
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);
}
});
Primer: Brisanje podataka tabele
webapi.safeAjax({
type: "DELETE",
url: "/_api/accounts(00000000-0000-0000-0000-000000000001)",
contentType: "application/json",
success: function (res) {
console.log(res);
}
});
Identifikovanje šifara statusa
Svaki odgovor na HTTP zahtev sadrži šifru statusa. Šifre statusa koje vraća Web API za portale uključuju sledeće:
Kôd | Opis | Tip |
---|---|---|
200 OK | Očekujte ovaj odgovor kada operacija treba da vrati podatke u telo odgovora. | Uspeh |
204 No Content | Očekujte ovaj odgovor kada operacija uspe, ali ne vraća podatke u telo odgovora. | Uspeh |
403 Zabranjeno | Očekujte ovaj odgovor za sledeće vrste grešaka:
|
Greška klijenta |
401 Neovlašćeno | Očekujte ovaj odgovor za sledeće vrste grešaka:
|
Greška klijenta |
413 Payload Too Large | Očekujte ovaj odgovor kada je dužina zahteva prevelika. | Greška klijenta |
400 BadRequest | Očekujte ovaj odgovor kada argument nije važeći. InvalidAttribute |
Greška klijenta |
404 Not Found | Očekujte ovaj odgovor kada resurs ne postoji. Tabela nije izložena za Web API. |
Greška klijenta |
405 Method Not Allowed | Do ove greške dolazi zbog pogrešnih kombinacija metoda i resursa. Na primer, ne možete koristiti DELETE ili PATCH na kolekciji tabela. Ova situacija može da se desi za sledeće vrste grešaka:
|
Greška klijenta |
501 Not Implemented | Očekujte ovaj odgovor kada se neka tražena operacija ne primeni. | Greška servera |
503 Usluga je nedostupna. | Očekujte ovaj odgovor kada usluga Web API-ja nije dostupna. | Greška servera |
Analiza grešaka u odgovoru
Razmotrimo sledeći primer HTTP odgovora koji i dalje uključuje unutrašnju grešku:
{
"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.."
}
}
}
Kodovi greške
Kodovi grešaka prikazani su u heksadecimalnom formatu za sve obrađene scenarije. Sledeća tabela navodi svaki kôd greške sa odgovarajućim nazivom i porukom.
Kôd greške | Naziv greške | Poruka o grešci |
---|---|---|
900400FF | NoAttributesForTableCreate | Nema atributa za radnju „Kreiranje tabele“. |
90040100 | InvalidAttribute | Nije moguće pronaći atribut {0} za tabelu {1}. |
90040101 | AttributePermissionIsMissing | Atribut {0} u tabeli {1} nije omogućen za Web API. |
90040102 | TablePermissionWriteIsMissingDuringUpdate | Nemate dozvolu za ažuriranje entiteta {0}. |
90040103 | TablePermissionCreateIsMissing | Nemate dozvolu za kreiranje entiteta {0}. |
90040104 | TablePermissionDeleteIsMissing | Nemate dozvolu za brisanje entiteta {0). |
90040105 | TablePermissionAppendIsMissngDuringAssociationChange | Nemate dozvolu za povezivanje ili prekidanje veze tabele {0} sa {1}. |
90040106 | TablePermissionAppendToIsMissingDuringAssociationChange | Nemate dozvolu za povezivanje ili prekidanje veze tabele {1} i {0} |
90040107 | HttpAntiForgeryException | Token kolačića protiv falsifikovanja i tokena polja obrasca ne odgovaraju. |
90040109 | MissingPortalSessionCookie | Nevažeći token sesije prenesen je u metodu koja se izbacuje. |
9004010C | ResourceDoesNotExists | Resurs nije pronađen za segment „{0}“. |
9004010D | CDSError | Došlo je do CDS greške. |
Odgovor za neispravljene greške sa šifrom HTTP statusa 500 vratiće grešku „Tokom obrade zahteva došlo je do neočekivane greške.“
Pogledajte i ovo
Pregled Web API-ja za portale
Operacije pisanja, ažuriranja i brisanja na portalima pomoću Web API-ja
Operacije čitanja portala pomoću Web API-ja
Napomena
Možete li nam reći o svojim željenim postavkama jezika u dokumentaciji? Ispunite kratku anketu. (imajte na umu da je ova anketa na engleskom jeziku)
Anketa će trajati oko sedam minuta. Ne prikupljaju se lični podaci (izjava o privatnosti).