Extraction d'éléments autres que des entités à l'aide des services de données REST

Le service de données REST permet d'extraire bien plus que des entités et notamment des collections d'entités, des propriétés, etc.

Extraction d'une collection d'entités

Une demande RetrieveEntitySet peut être utilisée par un client pour extraire un ensemble d'entités eXtreme Scale. Les entités sont représentées comme un document de flux Atom ou un cluster JSON dans la charge de la réponse. Pour plus de détails sur le protocole RetrieveEntitySet défini dans WCF Data Services, voir MSDN: RetrieveEntitySet Request.

L'exemple de demande RetrieveEntitySet ci-après extrait toutes les entités Order associées à l'entité Customer('IBM'). Seules les commandes 5000 et 5001 sont affichées ici.

AtomPub

  • Méthode : GET
  • URI de la demande : http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')/orders
  • En-tête de la demande : Accept: application/atom+xml
  • Charge de la demande : Aucune
  • En-tête de la réponse : Content-Type: application/atom+xml
  • Charge de la réponse :
    <?xml version="1.0" encoding="utf-8"?>
    <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">Order</title>
        <id>http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/
    					Order</id>
        <updated>2009-12-16T22:53:09.062Z</updated>
        <link rel = "self" title = "Order" href = "Order"/>
        <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:53:09.062Z</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:53:09.062Z</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>
  • Code de la réponse : 200 OK

JSON

  • Méthode : GET
  • URI de la demande : http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')/orders
  • En-tête de la demande : Accept: application/json
  • Charge de la demande : Aucune
  • En-tête de la réponse : Content-Type: application/json
  • Charge de la réponse :
    {"d":[{"__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"}}}]}
  • Code de la réponse : 200 OK

Extraction d'une propriété

Une demande RetrievePrimitiveProperty peut être utilisée pour extraire la valeur d'une propriété d'une instance d'entité eXtreme Scale. La valeur de la propriété est représentée au format XML pour les demandes AtomPub et comme objet JSON pour les demandes JSON dans la charge de la réponse. Pour plus de détails sur la demande RetrievePrimitiveProperty, voir MSDN: RetrievePrimitiveProperty Request.

L'exemple suivant de demande RetrievePrimitiveProperty extrait la propriété contactName de l'entité Customer('IBM').

AtomPub

  • Méthode : GET
  • URI de la demande : http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')/contactName
  • En-tête de la demande : Accept: application/xml
  • Charge de la demande : Aucune
  • En-tête de la réponse : Content-Type: application/atom+xml
  • Charge de la réponse :
    <contactName xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">
        John Doe
    </contactName>
  • Code de la réponse : 200 OK

JSON

  • Méthode : GET
  • URI de la demande : http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')/contactName
  • En-tête de la demande : Accept: application/json
  • Charge de la demande : Aucune
  • En-tête de la réponse : Content-Type: application/json
  • Charge de la réponse : {"d":{"contactName":"John Doe"}}
  • Code de la réponse : 200 OK

Extraction d'une valeur de propriété

Une demande RetrieveValue peut être utilisée pour extraire la valeur brute d'une propriété sur une instance d'entité eXtreme Scale. La valeur de la propriété est représentée comme valeur brute dans la charge de la réponse. Si le type d'entité est l'un des suivants, le type MIME de la réponse est “text/plain”. Sinon, le type MIME est “application/octet-stream." Ces types sont les suivants :
  • types primitifs Java et leurs encapsuleurs respectifs
  • java.lang.String
  • byte[]
  • Byte[]
  • char[]
  • Character[]
  • enums
  • java.math.BigInteger
  • java.math.BigDecimal
  • java.util.Date
  • java.util.Calendar
  • java.sql.Date
  • java.sql.Time
  • java.sql.Timestamp

Pour plus de détails sur la demande RetrieveValue, voir MSDN: RetrieveValue Request.

L'exemple de demande RetrieveValue ci-après extrait la valeur brute de la propriété contactName de l'entité Customer('IBM').

  • Méthode de la demande : GET
  • URI de la demande : http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')/contactName/$value
  • En-tête de la demande : Accept: text/plain
  • Charge de la demande : Aucune
  • En-tête de la réponse : Content-Type: text/plain
  • Charge de la réponse : John Doe
  • Code de la réponse : 200 OK

Extraction d'un lien

Une demande RetrieveLink peut être utilisée pour extraire les liens représentant une association to-one ou to-many. Pour l'association to-one, il s'agit d'un lien d'une instance d'entité eXtreme Scale vers une autre et le lien est représenté dans la charge de la réponse. Pour l'association to-many, il s'agit de liens d'une instance d'entité eXtreme Scale vers toutes les autres instances dans une collection d'entités eXtreme Scale spécifiées et la réponse est représentée sous forme de liens dans la charge de la réponse. Pour plus de détails sur la demande RetrieveLink, voir MSDN: RetrieveLink Request.

Voici un exemple de demande RetrieveLink. Dans cet exemple, nous extrayons l'association entre l'entité Order(orderId=5000,customer_customerId='IBM') et son client. La réponse indique l'URI de l'entité Customer.

AtomPub

  • Méthode : GET
  • URI de la demande : http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Order(orderId=5000,customer_customerId='IBM')/$links/customer
  • En-tête de la demande : Accept: application/xml
  • Charge de la demande : Aucune
  • En-tête de la réponse : Content-Type: application/xml
  • Charge de la réponse :
    <?xml version="1.0" encoding="utf-8"?>
    <uri>http://localhost:8080/wxsrestservice/restservice/
    			NorthwindGrid/Customer('IBM')</uri>
  • Code de la réponse : 200 OK

JSON

  • Méthode : GET
  • URI de la demande : http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Order(orderId=5000,customer_customerId='IBM')/$links/customer
  • En-tête de la demande : Accept: application/json
  • Charge de la demande : Aucune
  • En-tête de la réponse : Content-Type: application/json
  • Charge de la réponse : {"d":{"uri":"http:\/\/localhost:8080\/wxsrestservice\/restservice\/NorthwindGrid\/Customer('IBM')"}}

Extraction des métadonnées de service

Une demande RetrieveServiceMetadata peut être utilisée pour extraire le document CSDL (conceptual schema definition language), qui décrit le modèle de données associé au service de données REST d'eXtreme Scale. Pour plus de détails sur la demande RetrieveServiceMetadata, voir MSDN: RetrieveServiceMetadata Request.

Extraction du document de service

Une demande RetrieveServiceDocument peut être utilisée pour extraire le document de service qui décrit la collection de ressources exposée par le service de données REST d'eXtreme Scale. Pour plus de détails sur la demande RetrieveServiceDocument, voir MSDN: RetrieveServiceDocument Request.