Demandes d'insertion avec les services de données REST

Une demande InsertEntity peut être utilisée pour insérer dans le service de données REST d'eXtreme Scale une nouvelle instance d'entité eXtreme Scale, avec éventuellement de nouvelles entités associées.

Demande d'insertion d'entité

Une demande InsertEntity peut être utilisée pour insérer dans le service de données REST d'eXtreme Scale une nouvelle instance d'entité eXtreme Scale, avec éventuellement de nouvelles entités associées. Lors de l'insertion d'une entité, le client peut indiquer si la ressource ou l'entité doit être automatiquement associée aux autres entités existantes du service de données.

Le client doit inclure les informations de liaison requises dans la représentation de la relation associée dans la charge de la demande.

En plus de prendre en charge l'insertion d'une nouvelle instance EntityType (E1), la demande InsertEntity permet également l'insertion de nouvelles entités associées à E1 (décrite par une relation d'entité) dans une même demande. Par exemple, lors de l'insertion de l'entité Customer('IBM'), nous pouvons insérer toutes les commandes avec l'entité Customer('IBM'). Cette forme de demande InsertEntity est également connue sous le nom d'insertion profonde. Avec une insertion profonde, les entités associées doivent être représentées à l'aide de la représentation en ligne de la relation associée à E1 qui identifie le lien vers les entités associées à insérer.

Les propriétés de l'entité à insérer sont spécifiées dans la charge de la demande. Les propriétés sont analysées par le service de données REST, puis définies en fonction de la propriété correspondante sur l'instance d'entité. Pour le format AtomPub, la propriété est spécifiée comme un élément XML <d:NOM_PROPRIETE>. Pour JSON, la propriété est spécifiée comme une propriété d'un objet JSON.

Si une propriété est manquante dans la charge de la demande, le service de données REST spécifie comme valeur de propriété d'entité la valeur par défaut java. Toutefois, le système dorsal de la base de données peut rejeter une telle valeur par défaut si, par exemple, la colonne n'admet pas la valeur null dans la base de données. Un code de réponse 500 est renvoyé pour indiquer une erreur de serveur interne.

Si des propriétés sont spécifiées en double dans la charge, la dernière propriété est utilisée. Toutes les valeurs précédentes possédant le même nom de propriété sont ignorées par le service de données REST.

Si la charge contient une propriété inexistante, le service de données REST renvoie un code de réponse 400 (Demande incorrecte) pour indiquer que la demande envoyée par le client est syntaxiquement incorrecte.

Si les propriétés de clé sont manquantes, le service de données REST renvoie un code de réponse 400 (Demande incorrecte) pour indiquer une propriété de clé manquante.

Si la charge contient un lien vers une entité associée avec une clé inexistante, le service de données REST renvoie un code de réponse 404 (Introuvable) pour indiquer que l'entité associée est introuvable.

Si la charge contient un lien vers une entité associée avec un nom d'association incorrect, le service de données REST renvoie un code de réponse 400 (Demande incorrecte) pour indiquer que le lien est introuvable.

Si la charge contient plusieurs liens vers une relation to-one, le dernier lien est utilisé. Tous les liens précédents pour la même association sont ignorés.

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

Une demande InsertEntity insère une entité Customer avec la clé 'IBM'.

AtomPub

  • Méthode : POST
  • URI de la demande : http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')
  • En-tête de la demande : Accept: application/atom+xml Content-Type: application/atom+xml
  • Charge de la demande :
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <entry 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" />
    <content type="application/xml">
      <m:properties>
       <d:customerId>Rational</d:customerId>
       <d:city>Rochester</d:city>
       <d:companyName>Rational</d:companyName>
       <d:contactName>John Doe</d:contactName>
       <d:country>USA</d:country>
      </m:properties>
     </content>
    </entry>
  • En-tête de la réponse : Content-Type: application/atom+xml
  • Charge de la réponse :
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <entry 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" />
    <content type="application/xml">
      <m:properties>
       <d:customerId>Rational</d:customerId>
       <d:city>Rochester</d:city>
       <d:companyName>Rational</d:companyName>
       <d:contactName>John Doe</d:contactName>
       <d:country>USA</d:country>
      </m:properties>
     </content>
    </entry>
    En-tête de la réponse :								
    Content-Type: application/atom+xml
    Charge de la réponse :
    <?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('Rational')</id>
        <title type = "text"/>
        <updated>2009-12-16T23:25:50.875Z</updated>
        <author>
            <name/>
        </author>
        <link rel = "edit" title = "Customer" href = "Customer('Rational')"/>
        <link rel = "http://schemas.microsoft.com/ado/2007/08/dataservices/related/
    				orders" type = "application/atom+xml;type=feed"
    				title = "orders" href = "Customer('Rational')/orders"/>
        <content type = "application/xml">
            <m:properties>
                <d:customerId>Rational</d:customerId>
                <d:city>Rochester</d:city>
                <d:companyName>Rational</d:companyName>
                <d:contactName>John Doe</d:contactName>
                <d:country>USA</d:country>
                <d:version m:type = "Edm.Int32">0</d:version>
            </m:properties>
        </content>
    </entry>
  • Code de la réponse : 201 Créé

JSON

  • Méthode : POST
  • URI de la demande : http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer
  • En-tête de la demande : Accept: application/json Content-Type: application/json
  • Charge de la demande :
    {"customerId":"Rational",
    "city":null,
    "companyName":"Rational",
    "contactName":"John Doe",
    "country": "USA",}
  • 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/Customer('Rational')",
    "type":"NorthwindGridModel.Customer"},
    "customerId":"Rational",
    "city":null,
    "companyName":"Rational",
    "contactName":"John Doe",
    "country":"USA",
    "version":0,
    "orders":{"__deferred":{"uri":"http://localhost:8080/wxsrestservice/restservice/
    			NorthwindGrid/Customer('Rational')/orders"}}}}
  • Code de la réponse : 201 Créé

Demande d'insertion de lien

Une demande InsertLink peut être utilisée pour créer un lien entre deux instances d'entité eXtreme Scale. L'URI de la demande doit se résoudre en association eXtreme Scale to-many. La charge de la demande contient un seul lien qui pointe vers l'entité cible de l'association to-many.

Si l'URI de la demande InsertLink représente une association to-one, le service de données REST renvoie une réponse 400 (Demande incorrecte).

Si l'URI de la demande InsertLink pointe vers une association inexistante, le service de données REST renvoie une réponse 404 (Introuvable) pour indiquer que le lien est introuvable.

Si la charge contient un lien avec une clé inexistante, le service de données REST renvoie une réponse 404 (Introuvable) pour indiquer que l'entité associée est introuvable.

Si la charge contient plusieurs liens, le service de données REST d'eXtreme Scale analyse le premier lien. Les autres liens sont ignorés.

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

L'exemple de demande InsertLink ci-après crée un lien entre Customer('IBM') et Order(orderId=5000,customer_customerId='IBM').

AtomPub

  • Méthode : POST
  • URI de la demande : http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')/$link/orders
  • En-tête de la demande : Content-Type: application/xml
  • Charge de la demande :
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <uri>http://host:1000/wxsrestservice/restservice/NorthwindGrid/Order(orderId=
    			5000,customer_customerId='IBM')</uri>
  • Charge de la réponse : Aucune
  • Code de la réponse : 204 Pas de contenu

JSON

  • Méthode : POST
  • URI de la demande : http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')/$links/orders
  • En-tête de la demande : Content-Type: application/json
  • Charge de la demande :
    {"uri": "http://host:1000/wxsrestservice/restservice/NorthwindGrid/Order(orderId
    				=5000,customer_customerId='IBM')"}
  • Charge de la réponse : Aucune
  • Code de la réponse : 204 Pas de contenu