Introducción a SSDS (SQL Server Data Services)

August 1st, 2008 by

Dentro de Southworks he tenido la posibilidad de investigar e interactuar con esta nueva tecnología que Microsoft ofrece desde sus primeras versiones, realizando aplicaciones como LitwareHR (utilizada en el MIX 08 Las Vegas) y Trey Reseach (utilizada en el TechEd 2008) entre otras. Estas aplicaciones se encuentran dentro de las primeras aplicaciones de ejemplo que utilizan esta tecnología. SQL Server Data Services es el nuevo servicio de Microsoft que brinda repositorios de datos distribuidos.

Antes de continuar con el post debemos contar con un usuario y contraseña para poder utilizar este servicio. Los datos necesarios para gestionar un nuevo usuario para la versión beta los pueden encontrar en el siguiente link http://www.microsoft.com/sql/dataservices/default.mspx en este mismo sitio también se podrá encontrar varias guías e información sobre este servicio.

SSDS ofrece dos tipos de interfaces para consumir el servicio, brindado una interface SOAP y otra REST. Para las últimas versiones con las que he trabajo recomiendo utilizar particularmente la interface REST.

Para comprender SSDS podemos comenzar con la jerarquía que ofrece para organizar los datos y la forma en que los mismos son almacenados.

image

Un usuario puede contener 1..N Authorities, cada uno de ellos puede contener 1..N Containers y dentro de cada conteiner se pueden almacenar 1..N Entities. De esta manera se encuentran almacenados jerárquicamente los datos en SSDS.

Tanto los authorities, como los containers y entities están representados por el mismo formato de entidad, es decir que un authority y un container son considerados como una entidad en si mismo dentro de SSDS diferenciándose en un principio solamente por la posición jerárquica que ocupa.

Estructura de una Entidad de SSDS

 

Todas las entidades de SSDS cuentan con los siguientes campos:

· Id del tipo String (Campo con valor único dentro de un container)

· Kind del tipo String (Campo utilizado para identificar el tipo de entidad)

· Version del tipo long (Identifica la versión de la entidad)

Este conjunto de propiedades que todas las entidades de SSDS contienen reciben el nombre de propiedades intrínsecas. Por otro lado existe otro conjunto de propiedades que recibe el nombre de custom fields, debido a que el usuario de SSDS decide cuales serán para cada una de las entidades.

image

Las entidades son las únicas que pueden tener definidas custom fields, si bien los authorities y los container se encuentran definidos mediante entidades con el mismo formato, estas solamente contienen los campos id, kind y versión, los cuales se encuentran presentes en todas las entidades.

Mediante la interface REST que ofrece SSDS podemos navegar nuestros datos entre los distintos puntos jerárquicos de authorities, containers o entities de la siguiente manera.

image

El endpoint principal de la interface REST de SSDS es: http://data.beta.mssds.com/v1. En términos generales para hacer una consulta utilizando la interface REST debemos realizar un Get con el siguiente patrón de uri

http://{authority}.data.beta.mssds.com/v1/{container}/{entity} en donde se encuentran especificados los 3 niveles jerárquicos expuestos anteriormente en el grafico. Si uno desea realizar una consulta a nivel del servicio obteniendo de esta forma todos los authorities definidos, deberá ejecutar un get sobre el siguiente endpoint http://data.beta.mssds.com/v1?q= obteniendo como resultado la lista completa de authorities que poseemos. Observe que hemos agregado un parámetro Q que especifica cuál es el query que deseamos ejecutar, si este parámetro se encuentra definido sin especificar un valor el servicio interpretará que no estamos realizando ningún filtro sobre el total de los datos en este punto jerárquico en el cual se encuentra la uri.

image

De la misma manera podemos realizar una consulta para obtener todos los containers de un authority (http://{authority}.data.beta.mssds.com/v1?q=) o para obtener todas las entidades que se encuentran en un container en particular (http://{authority}.data.beta.mssds.com/v1/{container}?q=).

image

Utilizando la misma analogía podemos obtener el resultado de un authority, container o entidad en particular, simplemente obviando el parámetro que especifica el query a ejecutar. Para generalizar una consulta completa de entidad podemos utilizar la siguiente uri (http://{authority}.data.beta.mssds.com/v1/{container}/{entity}) , obviando el valor de {entity} o {container} dependiendo del nivel jerárquico al cual deseemos acceder.

Sintaxis de los queries

 

La sintaxis de los queries es muy similar a LINQ, teniendo como estructura principal el siguiente patrón from e in entities [where conditions] select e.

Dentro de las condiciones del where se puede utilizar cualquiera de los atributos de una entidad, ya sea intrínseca (Id, Kind o Version) o custom. Si el atributo que deseamos consultar es uno de tipo intrínseco debemos anteponer “e.” para acceder a su valor de la siguiente forma “e.Id”, “e.Kind” o “e.Version” según corresponda el caso. Como estos atributos son conocidos por SSDS para todas las entidades el acceso a los mismos es directo. Si el atributo que deseamos consultar es del tipo custom debemos accederlo de la siguiente manera “e[“Name”]” donde name es el nombre del atributo al cual deseamos acceder.

De esta forma un query ejemplo podría ser el siguiente:

From e in entities where e.Id == “Entity Id Value” select e

El resultado de esta consulta será aquella entidad que contenga como Id “Entity Id Value”.

From e in entities where e.Id != “Id value” && e[“Age”] == 15 select e

En este caso, esta consulta esta accediendo a dos propiedades, una del tipo intrínseco y otra custom. Si una entidad no contiene el atributo “Age” la evaluación de e[“Age”] == 15 dará como resultado false.

Operadores de Comparación: >, >=, <, <=, ==, !=

Operadores Lógicos: && (And), || (Or), ! (not)

Próximamente estaré posteando como utilizar SSDS via REST utilizando la API disponible para descargar en el sitio de SSDS.

Códigos de ejemplo:

· LitwareHR

· PhluffyFotos

· MSDN SSDS Rest Interface Samples

Saludos!

Max Deboli ~DreamThe

Posted in SSDS | 2 Comments »