Solicitudes de inserción con los servicios de datos REST

Se puede utilizar una solicitud InsertEntity para insertar una nueva instancia de entidad de eXtreme Scale, potencialmente con entidades relacionadas nuevas, en el servicio de datos REST de eXtreme Scale.

Solicitud de inserción de entidad

Se puede utilizar una solicitud InsertEntity para insertar una nueva instancia de entidad de eXtreme Scale, potencialmente con entidades relacionadas nuevas, en el servicio de datos REST de eXtreme Scale. Al insertar una entidad, el cliente puede especificar si el recurso o la entidad se deben enlazar automáticamente a otras entidades existentes en el servicio de datos.

El cliente debe incluir la información de enlace necesaria en la representación de la relación asociada en la carga útil de la solicitud.

Además de soportar la inserción de una instancia de EntityType nueva (E1), la solicitud InsertEntity también permite insertar entidades nuevas relacionadas con E1 (descritas por una relación de entidad) en una sola solicitud. Por ejemplo, al insertar una entidad Customer('IBM'), podemos insertar todos los pedidos con Customer('IBM'). Esta forma de solicitud InsertEntity también se conoce como una inserción profunda. Con una inserción profunda, las entidades relacionadas se deben representar utilizando la representación en línea de la relación asociada con E1 que identifica el enlace a las entidades relacionadas que se deben insertar.

Las propiedades de la entidad que se deben insertar se especifican en la carga útil de la solicitud. El servicio de datos REST analiza las propiedades y luego se define la propiedad correspondiente para éstas en la instancia de la entidad. Para el formato AtomPub, la propiedad se especifica como un elemento XML <d:PROPERTY_NAME>. Para JSON, la propiedad se especifica como una propiedad de un objeto JSON.

Si falta una propiedad en la carga útil de la solicitud, el servicio de datos REST define como valor de la propiedad de entidad el valor predeterminado java. No obstante, el programa de fondo de base de datos puede rechazar este valor predeterminado, por ejemplo, si la columna no puede tener un valor nulo en la base de datos. Entonces, se devolverá un código de respuesta 500 para indicar un error interno del servidor.

Si se especifican propiedades duplicadas en la carga útil, se utilizará la última propiedad. El servicio de datos REST pasa por alto todos los valores anteriores para el mismo nombre de propiedad.

Si la carga útil contiene una propiedad no existente, el servicio de datos REST devuelve un código de respuesta 400 (Bad Request) para indicar que la solicitud enviada por el cliente era sintácticamente incorrecta.

Si faltan las propiedades clave, el servicio de datos REST devuelve un código de respuesta 400 (Bad Request) para indicar que falta una propiedad clave.

Si la carga útil contiene un enlace a una entidad relacionada con una clave inexistente, el servicio de datos REST devuelve un código de respuesta 404 (Not Found) para indicar que la entidad enlazada no se encuentra.

Si la carga útil contiene un enlace a una entidad relacionada con un nombre de asociación incorrecto, el servicio de datos REST devuelve un código de respuesta 400 (Bad Request) para indicar que el enlace no se encuentra.

Si la carga útil contiene más de un enlace a una relación a uno, se utilizará el último enlace. Todos los enlaces anteriores correspondientes a la misma asociación se pasan por alto.

Si desea más detalles sobre la solicitud InsertEntity, consulte MSDN Library: InsertEntity Request (Biblioteca MSDN: solicitud InsertEntity).

Una solicitud InsertEntity inserta una entidad Customer con la clave 'IBM'.

AtomPub

  • Método: POST
  • URI de la solicitud: http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')
  • Cabecera de la solicitud: Accept: application/atom+xml Content-Type: application/atom+xml
  • Carga útil de la solicitud:
    <?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>
  • Cabecera de la respuesta: Content-Type: application/atom+xml
  • Carga útil de la respuesta:
    <?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>
    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('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>
  • Código de respuesta: 201 Created

JSON

  • Método: POST
  • URI de la solicitud: http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer
  • Cabecera de la solicitud: Accept: application/json Content-Type: application/json
  • Carga útil de la solicitud:
    {"customerId":"Rational",
    "city":null,
    "companyName":"Rational",
    "contactName":"John Doe",
    "country": "USA",}
  • Cabecera de la respuesta: Content-Type: application/json
  • Carga útil de la respuesta:
    {"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"}}}}
  • Código de respuesta: 201 Created

Solicitud de inserción de enlace

Se puede utilizar una solicitud InsertLink para crear un enlace nuevo entre dos instancias de entidad de eXtreme Scale. El URI de la solicitud se debe resolver como una asociación de eXtreme Scale a muchos. La carga útil de la solicitud contiene un solo enlace que apunta a la entidad de destino de la asociación a muchos.

Si el URI de la solicitud InsertLink representa una asociación a uno, el servicio de datos REST devuelve una respuesta 400 (Bad Request).

Si el URI de la solicitud InsertLink apunta a una asociación que no existe, el servicio de datos REST devuelve una respuesta 404 (Not Found) para indicar que el enlace no se encuentra.

Si la carga útil contiene un enlace con una clave que no existe, el servicio de datos REST devuelve una respuesta 404 (Not Found) para indicar que la entidad enlazada no se encuentra.

Si la carga útil contiene más de un enlace, el servicio de datos Rest de eXtreme Scale analizará el primer enlace. Los enlaces restantes se pasan por alto.

Si desea más detalles sobre la solicitud InsertLink, consulte: MSDN Library: InsertLink Request (Biblioteca MSDN: solicitud InsertLink).

El siguiente ejemplo de solicitud InsertLink crea un enlace de Customer('IBM') a Order(orderId=5000,customer_customerId='IBM').

AtomPub

  • Método: POST
  • URI de la solicitud: http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')/$link/orders
  • Cabecera de la solicitud: Content-Type: application/xml
  • Carga útil de la solicitud:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <uri>http://host:1000/wxsrestservice/restservice/NorthwindGrid/Order(orderId=
    			5000,customer_customerId='IBM')</uri>
  • Carga útil de la respuesta: Ninguna
  • Código de respuesta: 204 No Content

JSON

  • Método: POST
  • URI de la solicitud: http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')/$links/orders
  • Cabecera de la solicitud: Content-Type: application/json
  • Carga útil de la solicitud:
    {"uri": "http://host:1000/wxsrestservice/restservice/NorthwindGrid/Order(orderId
    				=5000,customer_customerId='IBM')"}
  • Carga útil de la respuesta: Ninguna
  • Código de respuesta: 204 No Content