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:
  • AccessDenied
  • AttributePermissionIsMissing
  • TablePermissionWriteIsMissingDuringUpdate
  • TablePermissionCreateIsMissing
  • TablePermissionDeleteIsMissing
  • TablePermissionAppendIsMissngDuringAssociationChange
  • TablePermissionAppendToIsMissingDuringAssociateChange
Greška klijenta
401 Neovlašćeno Očekujte ovaj odgovor za sledeće vrste grešaka:
  • MissingPortalRequestVerificationToken
  • MissingPortalSessionCookie
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:
  • InvalidOperation
  • NotSupported
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).