Portallar Web API'si için HTTP istekleri oluşturma ve hataları işleme

Web API 'SI ile etkileşim, hatalar da dahil olmak üzere gerekli üstbilgilere sahip ve HTTP yanıtlarını işleyen HTTP istekleri oluşturmayı içerir.

Önemli

  • Bu özelliğin çalışması için portal sürümünüzün 9.3.3.x veya üstü olması gerekir.

Web API URL'si ve sürüm oluşturma

Aşağıdaki tabloda yer alan biçimi kullanarak Web API URL'sini oluşturun.

Bölüm Veri Akışı Açıklaması
Protokol https://
Temel URL <portal URL>
Web API yolu _api
Kaynak Kullanmak istediğiniz tablonun mantıksal adı

Örneğin, bir servis talebine başvururken bu biçimi kullanın:

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

Tüm Web API'si kaynakları web rolleri bağlamında ilgili tablo izinlerini izler.

HTTP yöntemleri

HTTP istekleri farklı türde Yöntemler kullanabilir. Ancak Portallar Web API'si yalnızca aşağıdaki tablodaki yöntemleri destekler:

Metot Kullanım
Edinin Tablolardan veri alınırken kullanın.
Post Kayıt oluştururken kullanın.
Düzeltme Eki Tabloları güncelleştirirken veya upsert işlemleri yaparken kullanın.
Silme Kayıtları veya kayıtların bağımsız alan değerlerini silerken kullanın.
Put Kayıtların bağımsız alanlarını güncelleştirmek için sınırlı durumlarda kullanın.

HTTP üst bilgileri

Web API'si yalnızca JSON'u destekler. Her HTTP üstbilgisi aşağıdakileri içermelidir:

  • Yanıt gövdesi beklenmediğinde bileuygulamanın/JSON'un Accept üst bilgi değeri.
  • İstek, istek gövdesine JSON verisi içeriyorsaapplication/json değerine sahip bir İçerik türü üstbilgisi eklemeniz gerekir.

Geçerli OData sürümü 4.0'dır ancak gelecekteki sürümler yeni olanaklarla izin verebilir. Gelecekte kodunuz için uygulanacak OData sürümü hakkında belirsizliğe sahip olmadığından emin olmak için aşağıdaki sözdizimini kullanın:

Sözdizimi

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

Örnek: CSRF belirteci için sarmalayıcı AJAX işlevi

	(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)

Örnek: Tablo verilerini alın

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

Örnek: Tablo verileri oluşturma

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

Örnek: Tablo verilerini güncelleştirme

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

Örnek: Tablo verilerini silme

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

Durum kodlarını tanımla

Her HTTP isteği yanıtı bir durum kodu içerir. Portal Web API'si tarafından döndürülen durum kodları aşağıdakileri içerir:

Kod Description Type
200 Tamam İşleminiz yanıt gövdesinde veri döndürmeniz durumunda bu yanıtı bekler. Başarı
204 İçerik yok İşleminiz başarılı olduğunda ancak yanıt gövdesinde veri döndürmediğinde bu yanıtı bekleyin. Başarı
403 Yasaklanmış Bu yanıtı aşağıdaki hata türleri için alırsınız:
  • Erişim reddedildi.
  • AttributePermissionIsMissing
  • TablePermissionWriteIsMissingDuringUpdate
  • TablePermissionCreateIsMissing
  • TablePermissionDeleteIsMissing
  • TablePermissionAppendIsMissngDuringAssociationChange
  • TablePermissionAppendToIsMissingDuringAssociateChange
İstemci hatası
401 Yetkilendirilmedi Aşağıdaki hata türleri için bu yanıtı bekler:
  • MissingPortalRequestVerificationToken
  • MissingPortalSessionCookie
İstemci hatası
413 Zararlı Yük Çok Büyük İstek uzunluğu çok büyük olduğunda bu yanıtı bekler. İstemci hatası
400 BadRequest Bir bağımsız değişken geçersiz olduğunda bu yanıtı bekler.
InvalidAttribute
İstemci hatası
404 Bulunamadı Kaynak yoksa bu yanıtı bekleyin.
Tablo Web API'si için gösterilmez.
İstemci Hatası
405 Yönteme İzin Verilmiyor Bu hata, yanlış yöntem ve kaynak birleşimleri için oluşur. Örneğin, bir tablo koleksiyonu üzerinde SİLME veya YAMA eki kullanamazsınız. Bu durum, aşağıdaki hata türleri için olabilir:
  • InvalidOperation
  • NotSupported
İstemci hatası
501 Uygulanmadı İstenen bazı işlem uygulanmadığı zaman bu yanıtı bekler. Sunucu hatası
503 Hizmet Kullanılamıyor Web API hizmeti kullanılabilir değilse bu yanıtı bekleyin. Sunucu hatası

Yanıttaki hataları Ayrıştır.

Yine de iç hatayı içeren aşağıdaki HTTP yanıtını göz önünde bulundurun:

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

Hata kodları

Hata kodları tüm işlenmiş senaryolar için onaltılı biçimde görüntülenir. Aşağıdaki tabloda, ilgili ad ve iletisiyle birlikte her bir hata kodu listelenmektedir.

Hata kodu Hata Adı Hata iletisi
900400FF NoAttributesForTableCreate Tablo Oluştur eylemi için öznitelik yok.
Kategori 90040100 InvalidAttribute {1} tablosu için {0} özniteliği bulunamıyor.
Kategori 90040101 AttributePermissionIsMissing {1} tablosundaki {0} özniteliği, Web API'si için etkinleştirilmedi.
Kategori 90040102 TablePermissionWriteIsMissingDuringUpdate {0} varlığını güncelleştirmek için izniniz yok.
Kategori 90040103 TablePermissionCreateIsMissing {0} varlığını oluşturmak için izniniz yok.
Kategori 90040104 TablePermissionDeleteIsMissing {0) varlığını silmek için izniniz yok.
Kategori 90040105 TablePermissionAppendIsMissngDuringAssociationChange {0} tablosunu {1} ile ilişkilendirme veya ikisi arasındaki ilişkiyi kaldırma izniniz yok.
Kategori 90040106 TablePermissionAppendToIsMissingDuringAssociationChange {1} tablosunu {0} ile ilişkilendirme veya ikisi arasındaki ilişkiyi kaldırma izniniz yok
Kategori 90040107 HttpAntiForgeryException Forgery tanımlama bilgisi simgesi ve form alanı belirteci eşleşmiyor.
90040109 MissingPortalSessionCookie Oluşturma yöntemine geçersiz bir oturum belirteci geçirildi.
9004010C ResourceDoesNotExists "{0}" segmenti için kaynak bulunamadı.
9004010D CDSError CDS hatası oluştu.

HTTP durum kodu 500 ile işlenmeyen hatalara yönelik yanıt, şu hatayı döndürür "İstek işlenirken beklenmedik bir hata oluştu."

Ayrıca bkz.