Съставяйте HTTP заявки и обработвайте грешки за уеб API на порталите

Взаимодействието с уеб API включва съставяне на HTTP заявки с необходимите заглавки и обработка на HTTP отговори, включително всякакви грешки.

Важно

  • Вашата версия на портала трябва да е 9.3.3.x или по-нова, за да работи тази функция.

URL адрес на уеб API и версия

Конструирайте URL адреса на уеб API, като използвате формата в следващата таблица.

Част Описание
Протокол https://
Базов URL адрес <URL адрес на портала>
Път за уеб API _api
Ресурс Логическо име на таблицата, която искате да използвате

Например използвайте този формат, когато посочвате случай:

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

Всички ресурси на уеб API ще следват съответните разрешения за таблица в контекста на уеб ролите.

HTTP методи

HTTP заявките могат да използват различни видове методи. Уеб API на портали обаче поддържа само методите в следната таблица:

Метод Използване
Get Използвайте при извличане на данни от таблици.
Post Използвайте при създаване на записи.
Patch Използвайте при актуализиране на таблици или извършване на операции с upsert.
Delete Използвайте при изтриване на записи или стойности на отделни полета на записи.
Put Използвайте в ограничен брой ситуации за актуализиране на отделни полета на записи.

HTTP заглавки

Уеб API поддържа само JSON. Всяка HTTP заглавка трябва да включва:

  • Стойност на заглавка Приемане на application/json дори когато не се очаква основен текст на отговор.
  • Ако заявката включва JSON данни в основния си текст, трябва да включите заглавка от тип съдържание със стойностapplication/json.

Настоящата версия на OData е 4.0, но бъдещите версии може да позволят нови възможности. Използвайте следния синтаксис, за да сте сигурни, че няма неяснота относно версията на OData, която ще бъде приложена към вашия код в бъдеще:

Синтаксис

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

Пример: Функция Wrapper 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 заявка включва код на състояние. Кодовете на състоянието, върнати от уеб 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 Атрибутът {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 ще върне грешката – „При обработката на заявката възникна неочаквана грешка”.

Вижте също