Partekatu honen bidez:


Idatzi HTTP eskaerak eta kudeatu atarien Web APIko akatsak

Web APIarekin elkarreragiteak HTTP eskaerak goiburuekin konposatzea eta HTTP erantzunak maneiatzea dakartza, akatsak barne.

Garrantzitsua da

  • Atariaren bertsioak 9.3.3.x edo berriagoa izan behar du funtzio honek funtziona dezan.

Web APIaren URLa eta bertsioa

Eraiki Web APIaren URLa hurrengo taulako formatua erabiliz.

Zatia Deskribapenak
Protokoloa https://
Oinarrizko URLa <atariaren URLa>
Web APIaren bidea _api
Baliabidea Erabili nahi duzun taularen izen logikoa

Adibidez, erabili formatu hau kasua aipatzean:

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

Web-APIaren baliabide guztiek dagozkien taula-baimenei jarraituko diete web-rolekin testuinguruan.

HTTP metodoak

HTTP eskaerak hainbat metodo mota erabil ditzake. Hala ere, atarien Web-APIak taula honetako metodoak soilik onartzen ditu:

Metodoa Erabilera
Eskuratu Erabili tauletatik datuak berreskuratzean.
Argitaratu Erabili erregistroak sortzean.
Adabakia Erabili taulak eguneratzerakoan edo goranzko eragiketak egitean.
Ezabatu Erabili erregistroak edo erregistroen eremu indibidualaren balioak ezabatzean.
Jarri Erabili egoera mugatuetan erregistroen eremuak eguneratzeko.

HTTP goiburuak

Web APIak JSON soilik onartzen du. HTTP goiburu bakoitzak honako hauek izan behar ditu:

  • Onartu goiburuaren balioa aplikazioa/json, erantzun-organorik espero ez denean ere.
  • Eskaerak JSON datuak biltzen baditu eskaera-organoan, Eduki mota goiburua balioa duen application/json.

Egungo OData bertsioa 4.0 da, baina etorkizuneko bertsioek gaitasun berriak ahalbidetu ditzakete. Erabili sintaxia hau etorkizunean zure kodeari aplikatuko den OData bertsioari buruzko anbiguotasunik ez dagoela ziurtatzeko:

Sintaxia

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

Adibidez: CSRF tokenarentzako Wrapper AJAX funtzioa

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

Adibidez: berreskuratu taulako datuak

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

Adibidez: sortu taulako datuak

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

Adibidez: eguneratu taulako datuak

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

Adibidez: ezabatu taulako datuak

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

Identifikatu egoera-kodeak

HTTP eskaera erantzun bakoitzean egoera kodea sartzen da. Atarien Web-APIak itzultzen dituen egoera-kodeak honako hauek dira:

Kodea Deskribapenak Idatzi
200 Ados Espero erantzun hau zure eragiketak datuak erantzun-gorputzean itzuliko dituenean. Behar bezala gauzatu da
204 Edukirik ez Espero erantzun hau zure eragiketak arrakasta duenean, baina ez dituenean itzultzen datuak erantzun-gorputzean. Behar bezala gauzatu da
403 Debekatuta Espero erantzun hau hurrengo akats motengatik:
  • AccessDenied
  • AttributePermissionIsMissing
  • TablePermissionWriteIsMissingDuringUpdate
  • TablePermissionCreateIsMissing
  • TablePermissionDeleteIsMissing
  • TablePermissionAppendIsMissngDuringAssociationChange
  • TablePermissionAppendToIsMissingDuringAssociateChange
Bezero-errorea
401 Baimenik gabe Espero erantzun hau hurrengo akats motengatik:
  • MissingPortalRequestVerificationToken
  • MissingPortalSessionCookie
Bezero-errorea
413 Karga handiegia da Espero erantzun hau eskaeraren luzera handiegia denean. Bezero-errorea
400 BadRequest Espero erantzun hau argumentua baliogabea denean.
InvalidAttribute
Bezero-errorea
404 Ez da aurkitu Espero erantzun hau baliabidea ez dagoenean.
Web APIrako taula ez dago jasota.
Bezero-errorea
405 Ez da onartzen metodoa Errore hau metodo eta baliabide konbinazio okerretan gertatzen da. Adibidez, ezin duzu EZABATU edo ADABATU taula bilduma batean erabili. Egoera hori gerta daiteke hurrengo errore motetarako:
  • InvalidOperation
  • NotSupported
Bezero-errorea
501 Inplementatu gabe Espero erantzun hau eskatutako eragiketaren bat gauzatzen ez denean. Zerbitzariaren errorea
503 Zerbitzua ez dago erabilgarri Espero erantzun hau web API zerbitzua ez dagoenean. Zerbitzariaren errorea

Erantzunetik akatsak analizatu

Kontuan izan oraindik barneko errorea barne hartzen duen HTTP erantzun-adibide hau:

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

Errore-kodeak

Errore kodeak formatu hexadekimalan bistaratzen dira kudeatutako eszenatoki guztietan. Ondorengo taulan errore-kode bakoitza dagokion izenarekin eta mezuarekin zerrendatzen da.

Errore-kodea Errorearen izena Errore-mezua
900400FF NoAttributesForTableCreate Ez dago atributurik taula sortu ahal izateko.
90040100 InvalidAttribute {0} atributua ez dago {1} taulan.
90040101 AttributePermissionIsMissing {1} taulako {0} atributua ez dago gaituta webeko APIan.
90040102 TablePermissionWriteIsMissingDuringUpdate Ez duzu baimenik {0} entitatea eguneratzeko.
90040103 TablePermissionCreateIsMissing Ez duzu baimenik {0} entitatea sortzeko.
90040104 TablePermissionDeleteIsMissing Ez duzu baimenik ezabatzeko {0) entitatea.
90040105 TablePermissionAppendIsMissngDuringAssociationChange Ez duzu baimenik {0} taula {1} atributuarekin lotzeko edo hartatik bereizteko.
90040106 TablePermissionAppendToIsMissingDuringAssociationChange Ez duzu baimenik {1} taula {0} atributuari lotzeko edo hartatik bereizteko
90040107 HttpAntiForgeryException Ez dira bat datozen faltsutzeen aurkako token eta inprimaki eremuaren tokenak.
90040109 MissingPortalSessionCookie Saio baliogabearen token bat bota metodoan sartu zen.
9004010C ResourceDoesNotExists Baliabideak ez dira aurkitu segmentuarentzat '{0}'.
9004010D CDSError CDS errore bat gertatu da.

HTTP egoera 500 kodea duten erantzunik gabeko akatsen erantzunak akatsa itzuliko du "Espero ez den errorea gertatu da eskaera prozesatzean."

Ikusi ere