HTTP сұрауларын жасау және веб-API порталдары үшін қателерді өңдеу

Ескерім

2022 жылдың 12 қазанынан бастап күшіне енеді, Power Apps порталдары — Power Pages. Қосымша ақпарат: Microsoft Power Pages енді жалпыға қолжетімді (блог)
Жақында Power Apps порталдары құжаттамасын Power Pages құжаттамасымен көшіреміз және біріктіреміз.

Веб-API интерфейстерімен өзара әрекеттесу HTTP сұрауларын қажетті тақырыптармен құруды және HTTP жауаптарын, соның ішінде кез келген қателерді өңдеуді қамтиды.

Маңызды

  • Бұл мүмкіндіктің жұмыс істеуі үшін сіздің порталыңыздың нұсқасы 9.3.3.x немесе одан кейінгі нұсқа болуы керек.

Веб-API URL мекенжайы және нұсқасы

Келесі кестедегі пішімді қолдану арқылы веб-API URL мекенжайын жасаңыз.

Бөлігі Сипаттама
Протокол https://
Негізгі URL <portal URL>
Веб-API жолы _api
Ресурс Пайдаланғыңыз келетін кестенің логикалық атауы

Мысалы, осы пішімді істі қарау кезінде қолданыңыз:

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

Барлық веб‑API ресурстары веб-рөлдер мәнмәтінінде тиісті портал кестесінің рұқсаттарын орындайды.

HTTP әдістері

HTTP сұраулары әртүрлі әдістерді қолдана алады. Алайда веб-API порталдары келесі кестедегі әдістерге ғана қолдау көрсетеді:

Әдіс Қолданыс
Алу Кестелерден деректерді алу кезінде пайдалану.
Жариялау Жазбаларды жасау кезінде пайдаланыңыз.
Түзету Кестелерді жаңарту кезінде немесе upsert операцияларын орындау кезінде қолданыңыз.
Delete Жазбаларды немесе жазбалардың жеке өріс мәндерін жою кезінде пайдаланыңыз.
Put Жазбалардың жеке өрістерін жаңарту үшін шектеулі жағдайларда пайдаланыңыз.

HTTP тақырыптары

Веб-API тек JSON пішіміне қолдау көрсетеді. Әр HTTP тақырыбында келесілер болуы керек:

  • Жауап беретін мәтін күтілмеген жағдайда да, Қабылдау тақырып мәні бағдарлама/json болады.
  • Егер сұрауда сұрау мәтініндегі JSON деректері болса, сізге application/json мәні бар Мазмұн түрін қосуыңыз керек.

Қазіргі OData нұсқасы 4.0, бірақ болашақ нұсқаларында жаңа мүмкіндіктер пайда болуы мүмкін. Болашақта сіздің кодыңызға қолданылатын OData нұсқасында екіұштылық болмауын қамтамасыз ету үшін келесі синтаксисті қолданыңыз:

Синтаксис

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

Мысалы: CSRF таңбалауышына арналған AJAX біріктіру функциясы

    (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 сұрауына жауап күй кодын қамтиды. Порталдардың веб-API интерфейстері қайтарған күй кодтары мыналарды қамтиды:

Код Сипаттама Түр
200 OK Операцияңыз жауап мәтінінде деректерді қайтарған кезде осы жауап шығады. Сәтті аяқталу
204 мазмұн жоқ Операцияңыз сәтті аяқталған, бірақ жауап мәтінінде деректерді қайтарылмайтын болса осы жауап шығады. Сәтті аяқталу
403 Рұқсат етілмеген Қателіктің келесі түрлері үшін осы жауап шығады:
  • AccessDenied
  • AttributePermissionIsMissing
  • TablePermissionWriteIsMissingDuringUpdate
  • TablePermissionCreateIsMissing
  • TablePermissionDeleteIsMissing
  • TablePermissionAppendIsMissngDuringAssociationChange
  • TablePermissionAppendToIsMissingDuringAssociateChange
Клиент қатесі
401 Авторизацияланбаған Қателіктің келесі түрлері үшін осы жауап шығады:
  • MissingPortalRequestVerificationToken
  • MissingPortalSessionCookie
Клиент қатесі
413 пайдалы деректер тым үлкен Сұраныс ұзындығы тым үлкен болған кезде осы жауап шығады. Клиент қатесі
400 BadRequest Аргумент жарамсыз болған кезде осы жауап шығады.
InvalidAttribute
Клиент қатесі
404 табылмады Ресурс болмаған кезде осы жауап шығады.
Кесте веб‑API үшін көрсетілмеген.
Клиент қатесі
405 Әдіске рұқсат етілмеген Бұл қате әдіс пен ресурстардың үйлесімі қате болғанда орын алады. Мысалы, кестелер жиынында ЖОЮ немесе ТҮЗЕТУ опцияларын қолдана алмайсыз. Бұл жағдай қателіктің келесі түрлері үшін орын алуы мүмкін:
  • InvalidOperation
  • NotSupported
Клиент қатесі
501 Іске асырылмаған Кейбір сұралған әрекет орындалмаған кезде осы жауап шығады. Сервер қатесі
503 Қызмет қолжетімсіз Веб 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 {1} кестесі үшін {0} төлсипаты табылмады.
90040101-көше AttributePermissionIsMissing Web Api үшін {1} кестесінде {0} төлсипаты қосылмаған.
90040102-көше TablePermissionWriteIsMissingDuringUpdate {0} нысанын жаңартуға рұқсатыңыз жоқ.
90040103-көше TablePermissionCreateIsMissing {0} нысанын жасауға рұқсатыңыз жоқ.
90040104-көше TablePermissionDeleteIsMissing {0) нысанын жоюға рұқсатыңыз жоқ.
90040105-көше TablePermissionAppendIsMissngDuringAssociationChange {0} кестесін {1} кестесімен байланыстыру немесе ажырату рұқсатыңыз жоқ.
90040106-көше TablePermissionAppendToIsMissingDuringAssociationChange {1} кестесін {0} кестесімен байланыстыру немесе ажырату рұқсатыңыз жоқ
90040107-көше HttpAntiForgeryException Жоюға қарсы cookie таңбалауышы мен пішін өрісі таңбалауышы сәйкес келмейді.
90040109 MissingPortalSessionCookie Жарамсыз сеанс таңбалауышы throwing әдісіне берілді.
9004010C ResourceDoesNotExists '{0}' сегменті үшін ресурс табылмады.
9004010D CDSError CDS қатесі пайда болды.

HTTP күй коды 500 өңделмеген қателерге жауап мына қатені қайтарады "Сұрауды өңдеу кезінде күтпеген қате орын алды."

Сонымен қатар қараңыз

Порталдар веб API шолуы
Порталдардағы веб-API арқылы жазу, жаңарту және жою операциялары
Порталдардағы веб-API арқылы оқу операциялары

Ескерім

Сіз құжат тіліңіздің артықшылықтары туралы айта аласыз ба? Қысқа сауалнамаға қатысыңыз. (бұл сауалнама ағылшын тілінде екеніне назар аударыңыз)

Сауалнама шамамен жеті минут уақытыңызды алады. Жеке деректер жиналмайды (құпиялылық туралы мәлімдеме).