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:
|
Bezero-errorea |
401 Baimenik gabe | Espero erantzun hau hurrengo akats motengatik:
|
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:
|
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."