Solitamente con le REST API di SharePoint non si usano le query CAML (vedi Chiamare una Rest API di SharePoint Online da SPFx) ma può comunque tornare utile in specifici casi.

Le chiamate REST con query CAML sono permesse solo in POST passando in QueryString l'espressione CAML (vedi parametro @v1)
Text: Query CAML
/_api/Web/Lists/getByTitle('nome lista')/GetItems(query=@v1)?@v1=<View>...</View>
Il codice JavaScript per la chiamata è questo
JavaScript: REST Caml
var camlQuery = "<View><Query><Where><Eq><FieldRef Name='Title'/><Value Type='Text'>Power BI</Value></Eq></Where></Query></View>";

var url = "/_api/Web/Lists/getByTitle('Test Configurable View')/GetItems(query=@v1)?$select=Id,Title&@v1="+ JSON.stringify({ViewXml: camlQuery});

var options = {
  method: 'POST',
  headers: { 'Accept': 'application/json;odata=nometadata'}
};

var response = fetch(url, options)
  .then(function(response) {
    console.log('response', response);
    return response.json();
  })
    .then(function(data) {
    console.log('json', data);
  });
});
Viene usata la Fetch API per le chiamate REST.
se però si prova ad eseguire questo JavaScript si otterrà l'errore:
The security validation for this page is invalid and might be corrupted. Please use your web browser's Back button to try your operation again.
in quanto la query richiede il passaggio, nell'header della chiamata, del parametro X-RequestDigest contenere il valore del digest.

Ricavare il Digest

Per ottenere il valore del digest si può usare l'API alla url /_api/contextinfo
JavaScript: getDigest
function getDigest(callback) {
  var urlContext = "/_api/contextinfo";
  var options = {
    method: 'POST',
    cache: 'no-cache',
    headers: { 'Accept': 'application/json;odata=verbose' }
  };

  var response = fetch(urlContext, options)
    .then(function(response) { return response.json() })
    .then(function(data) { 
       var digest = data.d.GetContextWebInformation.FormDigestValue;
       console.log('digest', digest);
       callback(digest);
  });
}
che può essere usata nella forma
JavaScript
getDigest(function(digest) { ... codice che richiede il digest ...});

Query CAML

A questo punto chiamata REST con la query CAML può essere fatta in questo modo
JavaScript: Caml query
getDigest(function(digest) {
  var camlQuery = "<View><Query><Where><Eq><FieldRef Name='Title'/><Value Type='Text'>Power BI</Value></Eq></Where></Query></View>";
  // il parametro $select può essere implementato anche tramite CAML
  var url = "/_api/Web/Lists/getByTitle('Test Configurable View')/GetItems(query=@v1)?$select=Id,Title&@v1="+ JSON.stringify({ViewXml: camlQuery});

  var options = {
    method: 'POST',
    cache: 'no-cache',
    headers: {
      'Accept': 'application/json;odata=nometadata',
      'X-RequestDigest': digest
  }
};
	
var response = fetch(url, options)
  .then(function(response) {
    console.log('response', response);
    return response.json();
  })
  .then(function(data) {
    console.log('json', data);
  });
});
da un risultato JSON simile a questo
JSON: Result
[
  {
    "Id": 7,
    "ID": 7,
    "Title": "Power BI"
  }
]
Potrebbe interessarti anche: