Insert-Anforderungen mit REST-Datenservices

Eine InsertEntity-Anforderung kann verwendet werden, um eine neue Instanz einer eXtreme-Scale-Entität, potenziell mit neuen zugehörigen Entitäten, in den REST-Datenservice von eXtreme Scale einzufügen.

Anforderung zum Hinzufügen einer Entität (InsertEntity)

Eine InsertEntity-Anforderung kann verwendet werden, um eine neue Instanz einer eXtreme-Scale-Entität, potenziell mit neuen zugehörigen Entitäten, in den REST-Datenservice von eXtreme Scale einzufügen. Beim Einfügen einer Entität kann der Client angeben, oob die Ressource bzw. Entität automatisch mit anderen vorhandenen Entitäten im Datenservice verbunden werden soll.

Der Client muss die erforderlichen Bindungsinformationen in die Darstellung der zugehörigen Relation in den Nutzdaten der Anforderung einfügen.

Es wird nicht nur das Einfügen einer neuen EntityType-Instanz (E1) unterstützt. Die InsertEntity-Anforderung lässt auch das Einfügen neuer Entitäten, die mit der Entität E1 in Zusammenhang stehen (und durch eine Entitätsrelation beschrieben werden), in eine einzige Anforderung zu. Wenn beispielsweise Customer('IBM') eingefügt wird, können alle Aufträge (Order) mit Customer('IBM') eingefügt werden. Diese Form einer InsertEntity-Anforderung wird auch als tiefes Einfügen bezeichnet. Beim tiefen Einfügen müssen die zugehörigen Entitäten mit einer Inline-Darstellung der Relation dargestellt werden, die E1 zugeordnet ist und die die Verbindung zu den einzufügenden zugehörigen Entitäten identifiziert.

Die Eigenschaften der einzufügenden Entität werden in den Nutzdaten der Anforderung angegeben. Die Eigenschaften werden vom REST-Datenservice geparst und anschließend auf die entsprechenden Eigenschaften in der Entitätsinstanz gesetzt. Für das AtomPub-Format wird die Eigenschaft mit dem XML-Element <d:PROPERTY_NAME> angegeben. Für JSON wird die Eigenschaft als Eigenschaft eines JSON-Objekts angegeben.

Wenn eine Eigenschaft in den Nutzdaten der Anforderung fehlt, setzt der REST-Datenservice die Entitätseigenschaft auf den Java-Standardwert. Das Datenbank-Back-End kann einen solchen Standardwert jedoch zurückweisen, wenn die Spalte in der Datenbank beispielsweise keine Nullwerte enthalten kann. Anschließend wird ein Antwortcode 500 zurückgegeben.

Sind Eigenschaften in den Nutzdaten doppelt angegeben, wird die letzte Eigenschaft verwendet. Alle vorherigen Werte für denselben Eigenschaftsnamen werden vom REST-Datenservice ignoriert.

Wenn die Nutzdaten eine nicht vorhandene Eigenschaft enthalten, gibt der REST-Datenservice einen Antwortcode 400 (Ungültige Anforderung) zurück, um anzuzeigen, dass die vom Client gesendete Anforderung syntaktisch falsch ist.

Fehlen die Schlüsseleigenschaften, gibt der REST-Datenservice den Antwortcode 400 (Ungültige Anforderung) zurück, um auf eine fehlende Schlüsseleigenschaft hinzuweisen.

Falls die Nutzdaten eine Verbindung zu einer zugehörigen Entität mit einem nicht vorhandenen Schlüssel enthält, gibt der REST-Datenservice einen Antwortcode 404 (Nicht gefunden) zurück, um darauf hinzuweisen, dass die verbundene Entität nicht gefunden wurde.

Wenn die Nutzdaten eine Verbindung zu einer zugehörigen Entität mit einem ungültigen Assoziationsnamen enthalten, gibt der REST-Datenservice einen Antwortcode 400 (Ungültige Anforderung) zurück, um darauf hinzuweisen, dass die Verbindung nicht gefunden wurde.

Wenn die Nutzdaten mehrere Verbindungen zu einer :1-Relation enthalten, wird die letzte Verbindung verwendet. Alle vorherigen Verbindungen für dieselbe Assoziation werden ignoriert.

Weitere Einzelheiten zur InsertEntity-Anforderung finden Sie auf der Webseite MSDN Library: InsertEntity Request.

Eine InsertEntity-Anforderung fügt eine Customer-Entität mit dem Schlüssel 'IBM' ein.

AtomPub

  • Methode: POST
  • Anforderungs-URI: http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')
  • Anforderungsheader: Accept: application/atom+xml Content-Type: application/atom+xml
  • Nutzdaten der Anforderung:
    <?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>
  • Antwortheader: Content-Type: application/atom+xml
  • Nutzdaten der Antwort:
    <?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>
    Response Header:								
    Content-Type: application/atom+xml
    Response Payload:
    <?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>
  • Antwortcode: 201 Erstellt

JSON

  • Methode: POST
  • Anforderungs-URI: http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer
  • Anforderungsheader: Accept: application/json Content-Type: application/json
  • Nutzdaten der Anforderung:
    {"customerId":"Rational",
    "city":null,
    "companyName":"Rational",
    "contactName":"John Doe",
    "country":"USA",}
  • Antwortheader: Content-Type: application/json
  • Nutzdaten der Antwort:
    {"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"}}}}
  • Antwortcode: 201 Erstellt

InsertLink-Anforderung

Eine InsertLink-Anforderung kann verwendet werden, um eine neue Verbindung zwischen zwei Instanzen einer eXtreme-Scale-Entität zu erstellen. Der URI der Anforderung muss in eXtreme Scale in eine :N-Assoziation aufgelöst werden. Die Nutzdaten der Anforderung enthalten eine einzige Verbindung, die auf die Zielentität der :N-Assoziation zeigt.

Wenn der URI der InsertLink-Anforderung eine :1-Assoziation darstellt, gibt der REST-Datenservice eine Antwort 400 (Ungültige Anforderung) zurück.

Wenn der URI der InsertLink-Anforderung auf eine nicht vorhandene Assoziation zeigt, gibt der REST-Datenservice eine Antwort 404 (Nicht gefunden) zurück, um darauf hinzuweisen, dass die Verbindung nicht gefunden wurde.

Wenn die Nutzdaten eine Verbindung mit einem nicht vorhandenen Schlüssel enthalten, gibt der REST-Datenservice eine Antwort 404 (Nicht gefunden) zurück, um darauf hinzuweisen, dass die verbundene Entität nicht gefunden wurde.

Wenn die Nutzdaten mehrere Verbindungen enthalten, parst der REST-Datenservice von eXtreme Scale die erste Verbindung. Die verbleibenden Verbindungen werden ignoriert.

Weitere Einzelheiten zur InsertLink-Anforderung finden Sie auf der Webseite MSDN Library: InsertLink Request.

Die folgende InsertLink-Beispielanforderung erstellt eine Verbindung von Customer('IBM') zu Order(orderId=5000,customer_customerId='IBM').

AtomPub

  • Methode: POST
  • Anforderungs-URI: http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')/$link/orders
  • Anforderungsheader: Content-Type: application/xml
  • Nutzdaten der Anforderung:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <uri>http://host:1000/wxsrestservice/restservice/NorthwindGrid/Order(orderId=
    			5000,customer_customerId='IBM')</uri>
  • Nutzdaten der Antwort: Ohne
  • Antwortcode: 204 Kein Inhalt

JSON

  • Methode: POST
  • Anforderungs-URI: http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')/$links/orders
  • Anforderungsheader: Content-Type: application/json
  • Nutzdaten der Anforderung:
    {"uri": "http://host:1000/wxsrestservice/restservice/NorthwindGrid/Order(orderId
    				=5000,customer_customerId='IBM')"}
  • Nutzdaten der Antwort: Ohne
  • Antwortcode: 204 Kein Inhalt