Бөлісу құралы:


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 Рұқсат етілмеген Қателіктің келесі түрлері үшін осы жауап шығады:
  • 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 өңделмеген қателерге жауап мына қатені қайтарады "Сұрауды өңдеу кезінде күтпеген қате орын алды."

Келесіні де қараңыз: