HTTP сұрауларын жасау және веб-API порталдары үшін қателерді өңдеу
Веб-API интерфейстерімен өзара әрекеттесу HTTP сұрауларын қажетті тақырыптармен құруды және HTTP жауаптарын, соның ішінде кез келген қателерді өңдеуді қамтиды.
Маңызды
- Бұл мүмкіндіктің жұмыс істеуі үшін сіздің порталыңыздың нұсқасы 9.3.3.x немесе одан кейінгі нұсқа болуы керек.
Веб-API URL мекенжайы және нұсқасы
Келесі кестедегі пішімді қолдану арқылы веб-API URL мекенжайын жасаңыз.
Бөлігі | Сипаттама |
---|---|
Протокол | https:// |
Негізгі URL | <портал 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 Рұқсат етілмеген | Қателіктің келесі түрлері үшін осы жауап шығады:
|
Клиент қатесі |
401 Авторизацияланбаған | Қателіктің келесі түрлері үшін осы жауап шығады:
|
Клиент қатесі |
413 пайдалы деректер тым үлкен | Сұраныс ұзындығы тым үлкен болған кезде осы жауап шығады. | Клиент қатесі |
400 BadRequest | Аргумент жарамсыз болған кезде осы жауап шығады. InvalidAttribute |
Клиент қатесі |
404 табылмады | Ресурс болмаған кезде осы жауап шығады. Кесте веб‑API үшін көрсетілмеген. |
Клиент қатесі |
405 Әдіске рұқсат етілмеген | Бұл қате әдіс пен ресурстардың үйлесімі қате болғанда орын алады. Мысалы, кестелер жиынында ЖОЮ немесе ТҮЗЕТУ опцияларын қолдана алмайсыз. Бұл жағдай қателіктің келесі түрлері үшін орын алуы мүмкін:
|
Клиент қатесі |
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 өңделмеген қателерге жауап мына қатені қайтарады "Сұрауды өңдеу кезінде күтпеген қате орын алды."