Comporre richieste HTTP e gestire gli errori per l'API Web dei portali

L'interazione con l'API Web include la composizione delle richieste HTTP con le intestazioni richieste e la gestione delle risposte HTTP, inclusi eventuali errori.

Importante

  • La versione del portale deve essere 9.3.3.x o successiva affinché questa funzionalità sia operativa.

URL dell'API Web e controllo delle versioni

Costruisci l'URL dell'API Web utilizzando il formato nella tabella seguente.

In parte Description
Protocollo https://
URL di base <URL portale>
Percorso API Web _api
Risorsa Nome logico della tabella che desideri utilizzare

Ad esempio, utilizza questo formato quando fai riferimento a un caso:

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

Tutte le risorse dell'API Web seguiranno le rispettive autorizzazioni tabella nel contesto dei ruoli Web.

Metodi HTTP

Le richieste HTTP possono utilizzare diversi tipi di metodi. Tuttavia, l'API Web dei portali supporta solo i metodi nella tabella seguente:

metodo Utilizzo
Get Da utilizzare quando si recuperano dati dalle tabelle.
Registra Usa per la creazione record.
Patch Da utilizzare quando si aggiornano le tabelle o si eseguono operazioni di upsert.
Elimina Utilizza quando elimini record o singoli valori di campo di record.
Put Utilizza in situazioni limitate per aggiornare singoli campi di record.

Intestazioni HTTP

L'API Web supporta solo JSON. Ogni intestazione HTTP deve includere:

  • Un valore di intestazione Accetta di application/json, anche quando non è previsto alcun corpo della risposta.
  • Se la richiesta include dati JSON nel corpo della richiesta devi includere un'intestazione Content-Type con un valore diapplication/json.

La versione corrente di OData è 4.0, ma le versioni future possono permettere nuove funzionalità. Usa la seguente sintassi per assicurarti che non ci siano ambiguità sulla versione OData che verrà applicata al tuo codice in futuro:

Sintassi

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

Esempio: funzione Wrapper AJAX per il token 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)

Esempio: recuperare i dati della tabella

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

Esempio: creare dati di tabella

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

Esempio: aggiornare dati di tabella

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

Esempio: eliminare dati di tabella

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

Individuare i codici di stato

Ogni risposta alla richiesta HTTP include un codice di stato. I codici di stato restituiti dall'API Web dei portali includono i seguenti:

Codice Description Type
200 OK Quando l'operazione restituisce dati nel corpo della risposta, si riceve questa risposta. Operazione riuscita
204 No Content Quando l'operazione ha esito negativo ma non restituisce dati nel corpo della risposta, si riceve questa risposta. Operazione riuscita
403 Negato Per i seguenti tipi di errori, si riceve questa risposta:
  • AccessDenied
  • AttributePermissionIsMissing
  • TablePermissionWriteIsMissingDuringUpdate
  • TablePermissionCreateIsMissing
  • TablePermissionDeleteIsMissing
  • TablePermissionAppendIsMissngDuringAssociationChange
  • TablePermissionAppendToIsMissingDuringAssociateChange
Errore client
401 Non autorizzato Per i seguenti tipi di errori, si riceve questa risposta:
  • MissingPortalRequestVerificationToken
  • MissingPortalSessionCookie
Errore client
413 Payload Too Large Quando la lunghezza richiesta è troppo grande, si riceve questa risposta. Errore client
400 BadRequest Quando un argomento non è valido, si riceve questa risposta.
InvalidAttribute
Errore client
404 Not Found Quando la risorsa non esiste, si riceve questa risposta.
La tabella non è esposta per l'API Web.
Errore client
405 Method Not Allowed Questo errore si verifica in caso di combinazioni errate di metodo e risorsa. Ad esempio, non puoi utilizzare DELETE o PATCH in una raccolta di tabelle. Questa situazione si verifica per i seguenti tipi di errori:
  • InvalidOperation
  • NotSupported
Errore client
501 Not Implemented Quando un'operazione richiesta non viene implementata, si riceve questa risposta. Errore server
503 Servizio non disponibile Quando il servizio API Web non è disponibile, si riceve questa risposta. Errore server

Analizzare gli errori dalla risposta

Considera la seguente risposta HTTP di esempio che include ancora l'errore interno:

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

Codici errore

I codici di errore vengono visualizzati in formato esadecimale per tutti gli scenari gestiti. La tabella seguente elenca ogni codice di errore con il rispettivo nome e messaggio.

Codice errore Nome errore Messaggio di errore
900400FF NoAttributesForTableCreate Nessun attributo per l'azione Crea tabella.
90040100 InvalidAttribute Impossibile trovare l'attributo {0} per la tabella {1}.
90040101 AttributePermissionIsMissing L'attributo {0} nella tabella {1} non è abilitato per l'API Web.
90040102 TablePermissionWriteIsMissingDuringUpdate Non disponi dell'autorizzazione per aggiornare l'entità {0}.
90040103 TablePermissionCreateIsMissing Non disponi dell'autorizzazione per creare l'entità {0}.
90040104 TablePermissionDeleteIsMissing Non disponi dell'autorizzazione per eliminare l'entità {0).
90040105 TablePermissionAppendIsMissngDuringAssociationChange Non disponi dell'autorizzazione per associare o disassociare la tabella {0} con {1}.
90040106 TablePermissionAppendToIsMissingDuringAssociationChange Non disponi dell'autorizzazione per associare o disassociare la tabella {1} a {0}
90040107 HttpAntiForgeryException Il token cookie anti-contraffazione e il token del campo modulo non corrispondono.
90040109 MissingPortalSessionCookie Un token di sessione non valido è stato passato al metodo di lancio.
9004010C ResourceDoesNotExists Risorsa non trovata per il segmento "{0}".
9004010D CDSError Si è verificato un errore CDS.

La risposta per errori non gestiti con il codice di stato HTTP 500 restituirà l'errore "Si è verificato un errore imprevisto durante l'elaborazione della richiesta".

Vedi anche