Делите путем


Саставите HTTP захтеве и рукујте грешкама за Web API-је портала

Напомена

Од 12. октобра 2022. Power Apps портали постају Power Pages. Више информација: Услуга Microsoft Power Pages је сада општедоступна (блог)
Ускоро ћемо мигрирати и објединити документацију о Power Apps порталима са документацијом о услузи Power Pages.

Интеракција са Web API-јем укључује састављање HTTP захтева са потребним заглављима и руковање HTTP одговорима, укључујући све грешке.

Важно

  • Верзија вашег портала мора бити 9.3.3.x или новија да би ова функција могла да функционише.

URL адреса и верзије за Web API

Саставите Web API URL коришћењем формата у следећој табели.

Део Опис
Протокол https://
Основни URL <portal URL>
Путања Web API-ја _api
Ресурс Логичко име табеле коју желите да користите

На пример, користите овај формат када упућујете на предмет:

https://contoso.powerappsportals.com/_api/case

Сви ресурси Web API-ја ће следити одговарајуће дозволе за табеле портала у контексту веб-улога.

HTTP методе

HTTP захтеви могу да користе различите врсте метода. Међутим, Web API за портале подржава само методе из следеће табеле:

Начин Искоришћеност
Преузмите Користите их приликом преузимања података из табела.
Post Користите приликом креирања записа.
Patch Користите када ажурирате табеле или радите upsert операције.
Избриши Користите их приликом брисања записа или појединачних вредности поља записа.
Put Користите га у ограниченим ситуацијама за ажурирање појединачних поља записа.

HTTP заглавља

Web API подржава само JSON. Свако HTTP заглавље мора да садржи:

  • Вредност заглавља Accept за application/json, чак и када се не очекује тело одговора.
  • Ако захтев укључује JSON податке у телу захтева, морате да укључите заглавље Content-Type са вредношћу application/json.

Тренутна верзија OData је 4.0, али будуће верзије могу дозволити нове могућности. Користите следећу синтаксу како бисте били сигурни да неће бити двосмислености око OData верзије која ће се убудуће примењивати на ваш кôд:

Синтакса

Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0

Пример: Оквир AJAX функције за 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)

Пример: Преузимање података табеле

    webapi.safeAjax({
                type: "GET",
                url: "/_api/contacts?$select=firstname,lastname",
                contentType: "application/json",
                success: function (res) {
                        console.log(res);
                }
    });

Пример: Креирање података табеле

    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"))
        }
    });

Пример: Ажурирање података табеле

        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);
        }
    });

Пример: Брисање података табеле

        webapi.safeAjax({
        type: "DELETE",
        url: "/_api/accounts(00000000-0000-0000-0000-000000000001)",
        contentType: "application/json",
        success: function (res) {
            console.log(res);
        }
    });

Идентификовање шифара статуса

Сваки одговор на HTTP захтев садржи шифру статуса. Шифре статуса које враћа Web API за портале укључују следеће:

Кôд Опис Тип
200 OK Очекујте овај одговор када операција треба да врати податке у тело одговора. Успех
204 No Content Очекујте овај одговор када операција успе, али не враћа податке у тело одговора. Успех
403 Забрањено Очекујте овај одговор за следеће врсте грешака:
  • AccessDenied
  • AttributePermissionIsMissing
  • TablePermissionWriteIsMissingDuringUpdate
  • TablePermissionCreateIsMissing
  • TablePermissionDeleteIsMissing
  • TablePermissionAppendIsMissngDuringAssociationChange
  • TablePermissionAppendToIsMissingDuringAssociateChange
Грешка клијента
401 Неовлашћено Очекујте овај одговор за следеће врсте грешака:
  • MissingPortalRequestVerificationToken
  • MissingPortalSessionCookie
Грешка клијента
413 Payload Too Large Очекујте овај одговор када је дужина захтева превелика. Грешка клијента
400 BadRequest Очекујте овај одговор када аргумент није важећи.
InvalidAttribute
Грешка клијента
404 Not Found Очекујте овај одговор када ресурс не постоји.
Табела није изложена за Web API.
Грешка клијента
405 Method Not Allowed До ове грешке долази због погрешних комбинација метода и ресурса. На пример, не можете користити DELETE или PATCH на колекцији табела. Ова ситуација може да се деси за следеће врсте грешака:
  • InvalidOperation
  • NotSupported
Грешка клијента
501 Not Implemented Очекујте овај одговор када се нека тражена операција не примени. Грешка сервера
503 Услуга је недоступна. Очекујте овај одговор када услуга Web API-ја није доступна. Грешка сервера

Анализа грешака у одговору

Размотримо следећи пример HTTP одговора који и даље укључује унутрашњу грешку:

{
  "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.."
      }
    }
  }

Кодови грешке

Кодови грешака приказани су у хексадецималном формату за све обрађене сценарије. Следећа табела наводи сваки кôд грешке са одговарајућим називом и поруком.

Кôд грешке Назив грешке Порука о грешци
900400FF NoAttributesForTableCreate Нема атрибута за радњу „Креирање табеле“.
90040100 InvalidAttribute Није могуће пронаћи атрибут {0} за табелу {1}.
90040101 AttributePermissionIsMissing Атрибут {0} у табели {1} није омогућен за Web API.
90040102 TablePermissionWriteIsMissingDuringUpdate Немате дозволу за ажурирање ентитета {0}.
90040103 TablePermissionCreateIsMissing Немате дозволу за креирање ентитета {0}.
90040104 TablePermissionDeleteIsMissing Немате дозволу за брисање ентитета {0).
90040105 TablePermissionAppendIsMissngDuringAssociationChange Немате дозволу за повезивање или прекидање везе табеле {0} са {1}.
90040106 TablePermissionAppendToIsMissingDuringAssociationChange Немате дозволу за повезивање или прекидање везе табеле {1} и {0}
90040107 HttpAntiForgeryException Токен колачића против фалсификовања и токена поља обрасца не одговарају.
90040109 MissingPortalSessionCookie Неважећи токен сесије пренесен је у методу која се избацује.
9004010C ResourceDoesNotExists Ресурс није пронађен за сегмент „{0}“.
9004010D CDSError Дошло је до CDS грешке.

Одговор за неисправљене грешке са шифром HTTP статуса 500 вратиће грешку „Током обраде захтева дошло је до неочекиване грешке.“

Погледајте и

Преглед Web API-ја за портале
Операције писања, ажурирања и брисања на порталима помоћу Web API-ја
Операције читања портала помоћу Web API-ја

Напомена

Можете ли нам рећи о својим жељеним поставкама језика у документацији? Испуните кратку анкету. (имајте на уму да је ова анкета на енглеском језику)

Анкета ће трајати око седам минута. Не прикупљају се лични подаци (изјава о приватности).