JSON Light en API REST de SharePoint


Muy buenas a todos,

Uno de los medios de que disponemos a la hora de acceder a la información de SharePoint es por medio de la API REST. Hoy he conocido una de las opciones que nos ofrece SharePoint para, a través de su API REST, obtener respuestas más ligeras y sencillas. Esto es el soporte para JSON Light. Os dejo un extracto de la entrada del blog oficial de Office donde se explica esta nueva posibilidad de que disponemos.

One of the big bits of feedback we got from developers using the REST SharePoint API was about the payload of the data that was returned. Our response was to add support for JSON Light. JSON Light is an open standard that allows developers to provide in the header of the request how much metadata is returned

Os dejo el enlace a la entrada del blog oficial para el que quiera ver el post completo

http://blogs.office.com/2014/08/13/json-light-support-rest-sharepoint-api-released/

¿Y cómo usamos esto?. Habitualmente cuando hacemos una llamada a API REST, en el header de la petición incluimos la siguiente línea accept: application/json;odata=verbose. Con el soporte para JSON Light, disponemos de nuevas opciones para el parámetro odata que nos devolverán peticiones con distinta cantidad de metadatos en función de la opción que hayamos seleccionado. Las opciones de que disponemos son las siguientes:

  • odata=verbose: Este es el modo que veníamos usando hasta ahora
  • odata=minimalmetadata: Este modo nos devuelve una cantidad limitada de metadatos
  • odata=nometadata: Es el modo más ligero de que disponemos
  • Si no indicamos ningún valor para odata, por defecto tomará el valor minimalmetadata

Bueno, hasta aquí, prácticamente solo me he dedicado a transcribir en español y de una forma resumida lo que viene en el artículo del blog. Lo que he querido hacer es comprobar por mí mismo cómo funcionaban las distintas opciones, la información que devolvía cada una y los tiempos de respuesta. Y eso es lo que os quería enseñar en la entrada.

He creado una SharePoint Hosted App en la que he incluido el siguiente código.

$(document).ready(function () {
    
    var appweburl = GetParameter("SPAppWebUrl");
    var hostweburl = GetParameter("SPHostUrl");

    var executor = new SP.RequestExecutor(appweburl);

    executor.executeAsync({
        method: "GET",
        url: appweburl + "/_api/SP.AppContextSite(@target)/web/Lists/getbytitle('Noticias')/Items?@target='" + hostweburl + "'",
        headers: {
            "accept": "application/json;odata=verbose",
            "content-type": "application/json;odata=verbose"
        },
        success: function (data) {
            console.log(JSON.parse(data.body));
        },
        error: function (data) {
        }
    });

    executor.executeAsync({
        method: "GET",
        url: appweburl + "/_api/SP.AppContextSite(@target)/web/Lists/getbytitle('Noticias')/Items?@target='" + hostweburl + "'",
        headers: {
            "accept": "application/json;odata=minimalmetadata",
            "content-type": "application/json;odata=minimalmetadata"
        },
        success: function (data) {
            console.log(JSON.parse(data.body));
        },
        error: function (data) {
        }
    });

    executor.executeAsync({
        method: "GET",
        url: appweburl + "/_api/SP.AppContextSite(@target)/web/Lists/getbytitle('Noticias')/Items?@target='" + hostweburl + "'",
        headers: {
            "accept": "application/json;odata=nometadata",
            "content-type": "application/json;odata=nometadata"
        },
        success: function (data) {
            console.log(JSON.parse(data.body));
        },
        error: function (data) {
        }
    });


});

function GetParameter(paramToRetrieve) {
    var params =
            document.URL.split("?")[1].split("&");
    var strParams = "";
    for (var i = 0; i < params.length; i = i + 1) {
        var singleParam = params[i].split("=");
        if (singleParam[0] == paramToRetrieve)
            return decodeURIComponent(singleParam[1]);
    }
}

El código como veréis es muy sencillo. Hago la misma petición API REST, pero cada una con un valor para odata distinto y lo imprimo en consola para ver que devuelve. Este es el resultado

odata=verbose

verbose

odata=minimalmetadata

minimalmetadata

odata=nometadata

nometadata

Como podéis ver, la complejidad de las respuestas disminuye con cada tipo que usamos, cada una de ellas contiene menos información y los objetos que nos devuelve son más simples, por lo que, en ocasiones, en función de la información de la respuesta a la que queramos acceder, podemos usar peticiones que nos devuelve datos más ligeros.

¿Y como influye esto en el tamaño de la respuesta?, eso era otra de las cosas que quería comprobar, ya que como sabéis al trabajar del lado del cliente, uno de los aspectos más críticos, es intentar tener respuestas lo más ligeras posibles. Os dejo una captura donde se puede ver como se comporta cada una de las peticiones.

responsesize

Como podéis observar, las peticiones cada vez son más ligeras en función del modo que utilizamos.

Y nada más por ahora, quería probar y contar estas nuevas opciones que he descubierto hoy a la hora de usar la API REST y contaros lo que iba viendo. Espero que os sirva de ayuda por si no lo sabíais.

Saludos a todos.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s