Solicitudes de recuperación con el servicio de datos REST

Un cliente utiliza una solicitud RetrieveEntity para recuperar una entidad de eXtreme Scale. La carga útil de respuesta contiene los datos de la entidad en formato AtomPub o JSON. Además, se puede utilizar el operador del sistema $expand para expandir las relaciones. Las relaciones se representan en línea en la respuesta de servicio de datos como un documento de canal de información Feed, que es una relación a muchos, o un documento de entrada Atom, que es una relación a uno.

Consejo: Para obtener información detallada sobre el protocolo RetrieveEntity definido en WCF Data Services, consulte MSDN: RetrieveEntity Request.

Recuperación de una entidad

El ejemplo siguiente de RetrieveEntity recupera una entidad Customer con clave.

AtomPub JSON

Consultas

También se puede utilizar una consulta con una solicitud RetrieveEntitySet o RetrieveEntity. Una consulta se especifica mediante el operador $filter del sistema.

Para obtener información detallada sobre el operador $filter, consulte: MSDN: Filter System Query Option ($filter)

El protocolo OData soporta varias expresiones comunes. El servicio de datos REST de eXtreme Scale da soporte a un subconjunto de expresiones definidas en las especificaciones:

Las expresiones siguientes no están disponibles:

Para ver una lista completa de las expresiones disponibles en Microsoft WCF Data Services, y su descripción, consulte la sección 2.2.3.6.1.1 : Common Expression Syntax.

El ejemplo siguiente ofrece una demostración de una solicitud RetrieveEntity con una consulta. En este ejemplo, se recuperan todos los clientes cuyo nombre de contacto es “RoadRunner”. El único cliente que coincide con este filtro es Customer('ACME'), tal como se muestra en la carga útil de la respuesta.

Restricción: Esta consulta sólo funcionará para entidades no particionadas. Si la entidad Customer está particionada, se necesitará la clave perteneciente al cliente.
AtomPub
  • Método: GET
  • URI de la solicitud: http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer?$filter=contactName eq 'RoadRunner'
  • Cabecera de la solicitud: Accept: application/atom+xml
  • Carga útil de entrada: Ninguna
  • Cabecera de la respuesta: Content-Type: application/atom+xml
  • Carga útil de la respuesta:
    <?xml version="1.0" encoding="iso-8859-1"?>
    <feed
    	xml:base="http://localhost:8080/wxsrestservice/restservice"
    	xmlns:d="http://schemas.microsoft.com/ado/2007/08/
    			dataservices"
    xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
    	xmlns="http://www.w3.org/2005/Atom">
    	<title type="text">Customer</title>
    <id>http://localhost:8080/wxsrestservice/restservice/
    			NorthwindGrid/Customer	</id>
    	<updated>2009-09-16T04:59:28.656Z</updated>
    	<link rel="self" title="Customer" href="Customer" />
    	<entry>
    		<category term="NorthwindGridModel.Customer"
    scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
    		<id>
    http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/		Customer('ACME')</id>
    		<title type="text" />
    		<updated>2009-09-16T04:59:28.656Z</updated>
    		<author>
    			<name />
    		</author>
    		<link rel="edit" title="Customer" href="Customer('ACME')" />
    		<link
    			rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/orders"
    			type="application/atom+xml;type=feed" title="orders"
    			href="Customer('ACME')/orders" />
    		<content type="application/xml">
    			  <m:properties>
                <d:customerId>ACME</d:customerId>
                <d:city m:null = "true"/>
                <d:companyName>RoaderRunner</d:companyName>
                <d:contactName>ACME</d:contactName>
                <d:country m:null = "true"/>
                <d:version m:type = "Edm.Int32">3</d:version>
            </m:properties>
    		</content>
    	</entry>
    </feed>
  • Código de respuesta: 200 OK
JSON
  • Método: GET
  • URI de la solicitud:

    http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer?$filter=contactName eq 'RoadRunner'

  • Cabecera de la solicitud: Accept: application/json
  • Carga útil de la solicitud: Ninguna
  • Cabecera de la respuesta: Content-Type: application/json
  • Carga útil de la respuesta:
    {"d":[{"__metadata":{"uri":"http://localhost:8080/wxsrestservice/
    			restservice/NorthwindGrid/Customer('ACME')",
    "type":"NorthwindGridModel.Customer"},
    "customerId":"ACME",
    "city":null,
    "companyName":"RoaderRunner",
    "contactName":"ACME",
    "country":null,
    "version":3,
    			"orders":{"__deferred":{"uri":"http://localhost:8080/
    					wxsrestservice/restservice/NorthwindGrid/
    					Customer('ACME')/orders"}}}]}
  • Código de respuesta: 200 OK

Operador del sistema $expand

El operador del sistema $expand se puede utilizar para expandir asociaciones. Las asociaciones se representan en línea en la respuesta del servicio de datos. Las asociaciones con varios valores (a muchos) se representan como un documento de canal de información Atom o una matriz JSON. Las asociaciones con un solo valor (a uno) se representan como un documento de entrada Atom o un objeto JSON.

Para obtener información detallada sobre el operador del sistema $expand, consulte Expand System Query Option ($expand) (Opción de consulta del sistema expand ($expand).

A continuación se ofrece un ejemplo sobre cómo utilizar al operador del sistema $expand. En este ejemplo, recuperamos la entidad Customer('IBM'), que tiene asociados los pedidos 5000, 5001 y otros. La cláusula de $expand se define como “orders”, de modo que la colección de pedidos se expanda como en línea en la carga útil de la respuesta. Aquí sólo se muestran los pedidos 5000 y 5001.

AtomPub
  • Método: GET
  • URI de la solicitud: http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')?$expand=orders
  • Cabecera de la solicitud: Accept: application/atom+xml
  • Carga útil de la solicitud: Ninguna
  • Cabecera de la respuesta: Content-Type: application/atom+xml
  • Carga útil de la respuesta:
    <?xml version="1.0" encoding="utf-8"?>
    <entry xml:base = "http://localhost:8080/wxsrestservice/restservice"
    	xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"
    			xmlns:m = "http://schemas.microsoft.com/ado/2007/08/dataservices/
    			metadata" xmlns = "http://www.w3.org/2005/Atom">
    <category term = "NorthwindGridModel.Customer" scheme = "http://schemas.
    
    microsoft.com/ado/2007/08/dataservices/scheme"/>
        <id>http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/
    				Customer('IBM')</id>
        <title type = "text"/>
        <updated>2009-12-16T22:50:18.156Z</updated>
        <author>
            <name/>
        </author><link rel = "edit" title = "Customer" href =
    				"Customer('IBM')"/>
        <link rel = "http://schemas.microsoft.com/ado/2007/08/dataservices/
    				related/orders" type = "application/atom+xml;type=feed" title =
    				"orders" href = "Customer('IBM')/orders">
            <m:inline>
                <feed>
                    <title type = "text">orders</title>
                    <id>http://localhost:8080/wxsrestservice/restservice/
    									NorthwindGrid/Customer('IBM')/orders</id>
                    <updated>2009-12-16T22:50:18.156Z</updated>
                    <link rel = "self" title = "orders" href = "Customer
    										('IBM')/orders"/>
                    <entry>
                        <category term = "NorthwindGridModel.Order" scheme =
    											"http://schemas.microsoft.com/ado/2007/08/
    											dataservices/scheme"/>
                        <id>http://localhost:8080/wxsrestservice/restservice/
    										NorthwindGrid/Order(orderId=5000,customer_customerId=
    'IBM')</id>
                        <title type = "text"/>
                        <updated>2009-12-16T22:50:18.156Z</updated>
                        <author>
                            <name/>
                        </author>
                        <link rel = "edit" title = "Order" href =
    									 "Order(orderId=5000,customer_customerId='IBM')"/>
                        <link rel = "http://schemas.microsoft.com/ado/2007/08/
    									 dataservices/related/customer" type = "application/
    									 atom+xml;type=entry" title ="customer" href =
    									 "Order(orderId=5000,customer_customerId='IBM')/customer"/>
                        <link rel = "http://schemas.microsoft.com/ado/2007/08/
    									 dataservices/related/orderDetails" type = "application/
    											atom+xml;type=feed" title ="orderDetails" href =
    											"Order(orderId=5000,customer_customerId='IBM')/orderDetails"/>
                        <content type = "application/xml">
                            <m:properties>
                                <d:orderId m:type = "Edm.Int32">5000</d:orderId>
                                <d:customer_customerId>IBM</d:customer_customerId>
                                <d:orderDate m:type = "Edm.DateTime">
    																2009-12-16T19:46:29.562</d:orderDate>
                                <d:shipCity>Rochester</d:shipCity>
                                <d:shipCountry m:null = "true"/>
                                <d:version m:type = "Edm.Int32">0</d:version>
                            </m:properties>
                        </content>
                    </entry>
                    <entry>
                        <category term = "NorthwindGridModel.Order" scheme =
    											"http://schemas.microsoft.com/ado/2007/08/
    											dataservices/scheme"/>
                        <id>http://localhost:8080/wxsrestservice/restservice/
    									 NorthwindGrid/Order(orderId=5001,customer_customerId=
    'IBM')</id>
                        <title type = "text"/>
                        <updated>2009-12-16T22:50:18.156Z</updated>
                        <author>
                            <name/></author>
                        <link rel = "edit" title = "Order" href = "Order(
    orderId=5001,customer_customerId='IBM')"/>
                        <link rel = "http://schemas.microsoft.com/ado/2007/
    											08/dataservices/related/customer" type =
    											"application/atom+xml;type=entry" title =
    											"customer" href = "Order(orderId=5001,customer_customerId=
    									'IBM')/customer"/>
                        <link rel = "http://schemas.microsoft.com/ado/2007/08/
    												dataservices/related/orderDetails" type =
    												"application/atom+xml;type=feed" title =
    												"orderDetails" href = "Order(orderId=5001,
    									customer_customerId='IBM')/orderDetails"/>
    <content type = "application/xml">
                            <m:properties>
                                <d:orderId m:type = "Edm.Int32">5001</d:orderId>
                                <d:customer_customerId>IBM</d:customer_customerId>
                                <d:orderDate m:type = "Edm.DateTime">2009-12-16T19:
    															50:11.125</d:orderDate>
                                <d:shipCity>Rochester</d:shipCity>
                                <d:shipCountry m:null = "true"/>
                                <d:version m:type = "Edm.Int32">0</d:version>
                            </m:properties>
                        </content>
                    </entry>
                </feed>
            </m:inline>
        </link>
        <content type = "application/xml">
            <m:properties>
                <d:customerId>IBM</d:customerId>
                <d:city m:null = "true"/>
                <d:companyName>IBM Corporation</d:companyName>
                <d:contactName>John Doe</d:contactName>
                <d:country m:null = "true"/>
                <d:version m:type = "Edm.Int32">4</d:version>
            </m:properties>
        </content>						
    </entry>
  • Código de respuesta: 200 OK
JSON
  • Método: GET
  • URI de la solicitud: http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')?$expand=orders
  • Cabecera de la solicitud: Accept: application/json
  • Carga útil de la solicitud: Ninguna
  • Cabecera de la respuesta: Content-Type: application/json
  • Carga útil de la respuesta:
    {"d":{"__metadata":{"uri":"http://localhost:8080/wxsrestservice/
    			restservice/NorthwindGrid/Customer('IBM')",
    "type":"NorthwindGridModel.Customer"},
    "customerId":"IBM",
    "city":null,
    "companyName":"IBM Corporation",
    "contactName":"John Doe",
    "country":null,
    "version":4,
    "orders":[{"__metadata":{"uri":"http://localhost:8080/
    				wxsrestservice/restservice/NorthwindGrid/Order(
    				orderId=5000,customer_customerId='IBM')",
    "type":"NorthwindGridModel.Order"},
    "orderId":5000,
    "customer_customerId":"IBM",
    "orderDate":"\/Date(1260992789562)\/",
    "shipCity":"Rochester",
    "shipCountry":null,
    "version":0,
    "customer":{"__deferred":{"uri":"http://localhost:8080/
    			wxsrestservice/restservice/NorthwindGrid/Order(
    			orderId=5000,customer_customerId='IBM')/customer"}},
    "orderDetails":{"__deferred":{"uri":"http://localhost:
    					8080/wxsrestservice/restservice/NorthwindGrid/
    					Order(orderId=5000,customer_customerId='IBM')/
    					orderDetails"}}},
    {"__metadata":{"uri":"http://localhost:8080/wxsrestservice/
    			restservice/NorthwindGrid/Order(orderId=5001,
    					customer_customerId='IBM')","type":
    					"NorthwindGridModel.Order"},
    "orderId":5001,
    "customer_customerId":"IBM",
    "orderDate":"\/Date(1260993011125)\/",
    "shipCity":"Rochester",
    "shipCountry":null,
    "version":0,
    "customer":{"__deferred":{"uri":"http://localhost:
    			8080/wxsrestservice/restservice/
    NorthwindGrid/Order(orderId=5001,customer_customerId='IBM')/customer"}},
    "orderDetails":{"__deferred":{"uri":"http://localhost:8080/
    			wxsrestservice/restservice/NorthwindGrid/Order(
    			orderId=5001,	customer_customerId='IBM')/
    			orderDetails"}}}]}}
  • Código de respuesta: 200 OK