Nutzlastformat für Tabellendienstvorgänge
Die REST-API des Tabellendiensts unterstützt ATOM und JSON als OData-Nutzlastformate. Während das ATOM-Protokoll für alle Versionen der Azure-Speicherdienste unterstützt wird, wird das JSON-Protokoll nur für Version 2013-08-15 und höher unterstützt.
JSON ist das empfohlene Nutzlastformat. JSON wird für Version 2013-08-15 und höher unterstützt. Sie müssen JSON mit Version 2015-12-11 und höher verwenden.
ATOM wird für Versionen vor 2015-12-11 unterstützt.
Hinweis
Die folgenden REST-API-Vorgänge sind keine OData-APIs und unterstützen derzeit nicht JSON: Tabellen-ACL abrufen, Tabellen-ACL festlegen, Tabellendiensteigenschaften abrufen und Tabellendiensteigenschaften festlegen.
Um das JSON- oder ATOM-Format anzugeben, geben Sie die entsprechenden Werte für die Content-Type
Header und Accept
an (unten beschrieben). Beachten Sie folgende Einschränkungen:
Der
Content-Type
-Header ist für alle Anforderungen erforderlich, die eine OData-Nutzlast enthalten.Wenn der
Accept
-Header nicht bereitgestellt wird, dann wird als Inhaltstyp der Antwort standardmäßigapplication/atom+xml
verwendet.Durch Festlegen des URI-Parameters
$format
überschreiben Sie den imAccept
-Anforderungsheader angegebenen Wert, wenn die OData-Datendienstversion auf 3.0 festgelegt ist. Ausführliche Informationen zur OData-Dienstversion finden Sie unter Festlegen der OData Data Service-Versionsheader .
Um das Nutzlastformat anzugeben, legen Sie den Content-Type
-Anforderungsheader und den Accept
-Anforderungsheader gemäß der folgenden Tabelle fest:
Nutzlastformat | Header „Content-Type“ | Accept-Header | Datendienstversion (REST-API-Version) | Unterstützte APIs |
---|---|---|---|---|
Atom |
application/atom+xml |
application/atom+xml |
1.0 (beliebige Version) 2.0 (18.08.2011 oder höher) 3,0 (15.08.2013 oder höher) |
QueryTables CreateTable Tabelle löschen Entitäten abfragen Insert Entities Insert Or Merge Entity Insert Or Replace Entity Entität aktualisieren Entität zusammenführen Entität löschen |
JSON |
application/json |
application/json;odata=nometadata application/json;odata=minimalmetadata application/json;odata=fullmetadata Ausführliche Informationen finden Sie im Abschnitt JSON-Format unten. |
3,0 (15.08.2013 oder höher) | QueryTables CreateTable Tabelle löschen Entitäten abfragen Insert Entities Insert Or Merge Entity Insert Or Replace Entity Entität aktualisieren Entität zusammenführen Entität löschen |
XML |
application/xml |
application/xml |
– | Get Table ACL Set Table ACL Get Table Service Properties Festlegen von Tabellendiensteigenschaften |
JSON-Format (Anwendung/JSON) (Versionen 2013-08-15 und höher)
OData erweitert das JSON-Format, indem wie beim oben beschriebenen ATOM-Format allgemeine Konventionen für diese Name-Wert-Paare definiert werden. OData definiert einen Satz kanonischer Anmerkungen für Steuerungsinformationen wie IDs, Typen und Links. Ausführliche Informationen zum JSON-Format finden Sie unter Einführung in JSON.
Der Hauptvorteil bei der Verwendung des JSON-Formats von OData besteht darin, dass die vorhersagbaren Teile der Nutzlast ausgelassen werden können, um die Nutzlastgröße zu reduzieren. Um diese Daten auf der Empfängerseite wieder zusammenzusetzen, werden Ausdrücke zur Berechnung der fehlenden Links, Typinformationen und Steuerungsdaten verwendet. Um zu steuern, was in der Nutzlast ausgelassen wird, können Sie drei Ebenen als Teil des Accept
-Headers angeben:
application/json;odata=nometadata
application/json;odata=minimalmetadata
application/json;odata=fullmetadata
Die folgenden ODATA-Anmerkungen werden vom Azure-Tabellendienst unterstützt:
odata.metadata
: Die Metadaten-URL für eine Auflistung, eine Entität, einen primitiven Wert oder ein Dienstdokument.odata.id
: Die Entitäts-ID, die in der Regel die URL der Ressource ist.odata.editlink
: Der Link zum Bearbeiten/Aktualisieren des Eintrags, wenn die Entität aktualisiert werden kann und wenn die odata.id keine URL ist, die zur Bearbeitung der Entität verwendet werden kann.odata.type
: Der Typname des enthaltenden Objekts.odata.etag
: Das ETag der Entität.PropertyName@odata.type
bei benutzerdefinierten Eigenschaften: der Typname der Zieleigenschaft.PropertyName@odata.type
bei Systemeigenschaften (d. h. die EigenschaftenPrimaryKey
,RowKey
undTimestamp
): der Typname der Zieleigenschaft.
Die auf den einzelnen Ebenen eingeschlossenen Informationen sind in der folgenden Tabelle zusammengefasst:
Annotations |
odata=fullmetadata |
odata=minimalmetadata |
odata=nometadata |
---|---|---|---|
odata.metadata |
Ja | Ja | Nein |
odata.id |
Ja | Nein | Nein |
odata.editlink |
Ja | Nein | Nein |
odata.type |
Ja | Nein | Nein |
odata.etag |
Ja | Nein | Nein |
PropertyName@odata.type bei benutzerdefinierten Eigenschaften |
Ja | Ja | Nein |
PropertyName@odata.type bei Systemeigenschaften |
Ja | Nein | Nein |
Eigenschaftstypen in einem JSON-Feed
Die odata.type
-Anmerkung wird im JSON-Format von OData verwendet, um den Typ einer offenen Eigenschaft zu ermitteln. Diese Anmerkung ist vorhanden, wenn alle folgenden Bedingungen erfüllt sind:
Die JSON-Steuerungsebene wird entweder auf
odata=minimalmetadata
oderodata=fullmetadata
festgelegt, wie im Abschnitt JSON-Format erläutert.Die Eigenschaft ist eine benutzerdefinierte Eigenschaft. Beachten Sie, dass bei Azure-Tabellen nur die Eigenschaften
PartitionKey
,RowKey
undTimestamp
Systemeigenschaften sind und dass ihre Typinformationen in$metadata
deklariert sind. Die Typanmerkung dieser Eigenschaften ist nur vorhanden, wenn die Steuerungsebene aufodata=fullmetadata
festgelegt ist. Weitere Informationen finden Sie unter Grundlegendes zum Tabellendienstdatenmodell.Der Typ der Eigenschaft kann nicht mithilfe der Heuristik zur Typerkennung ermittelt werden, wie in der folgenden Tabelle zusammengefasst.
Edm-Typ | odata.type-Anmerkung erforderlich | JSON-Typ |
---|---|---|
Edm.Binary |
Ja | String |
Edm.Boolean |
Nein | Literale |
Edm.DateTime |
Ja | String |
Edm.Double |
Nein | Numerisch (enthält Dezimaltrennzeichen) |
Edm.Guid |
Ja | String |
Edm.Int32 |
Nein | Numerisch (enthält keine Dezimaltrennzeichen) |
Edm.Int64 |
Ja | String |
Edm.String |
Nein | String |
– | Nein | Null |
Der Tabellendienst speichert null
keine Werte für Eigenschaften. Beim Schreiben einer Entität kann ein null
Wert mit oder ohne odata.type-Anmerkung angegeben werden, und jede Eigenschaft mit einem null
Wert wird so behandelt, als ob die Anforderung diese Eigenschaft nicht enthält.
Null
Eigenschaftswerte werden nie zurückgegeben, wenn Entitäten abgefragt werden.
Für Edm.Double werden die Werte NaN
und Infinity
-Infinity
in JSON mit dem Typ String
dargestellt, und eine odata.type-Anmerkung ist erforderlich. Der Tabellendienst unterstützt keine negative Version von NaN
und unterscheidet im JSON-Format nicht zwischen positiver und negativer Null (er behandelt -0.0
als 0.0
).
Die folgende JSON-Entität stellt ein Beispiel für jeden der acht verschiedene Eigenschaftstypen bereit:
{
"PartitionKey":"mypartitionkey",
"RowKey":"myrowkey",
"DateTimeProperty@odata.type":"Edm.DateTime",
"DateTimeProperty":"2013-08-02T17:37:43.9004348Z",
"BoolProperty":false,
"BinaryProperty@odata.type":"Edm.Binary",
"BinaryProperty":"AQIDBA==",
"DoubleProperty":1234.1234,
"GuidProperty@odata.type":"Edm.Guid",
"GuidProperty":"4185404a-5818-48c3-b9be-f217df0dba6f",
"Int32Property":1234,
"Int64Property@odata.type":"Edm.Int64",
"Int64Property":"123456789012",
"StringProperty":"test"
}
Da PartitionKey
und RowKey
Systemeigenschaften sind, d. h., sie müssen von allen Tabellenzeilen definiert werden, wird die zugehörige Typanmerkung nicht in der Entität angezeigt. Diese Eigenschaften sind als Edm.String
-Typ vordefiniert. Die anderen Eigenschaften sind jedoch benutzerdefinierte Eigenschaften und enthalten daher Typinformationen, die einem der unterstützten primitiven Typen in der obigen Tabelle entsprechen.
Beispiele:
Der folgende OData-Beispieleintrag veranschaulicht das JSON-Format, das als Anforderung zum Einfügen einer Entität in Azure Table Storage gesendet wird (Details zum Einfügevorgang finden Sie unter Entität einfügen ):
{
"Address":"Mountain View",
"Age":23,
"AmountDue":200.23,
"CustomerCode@odata.type":"Edm.Guid",
"CustomerCode":"c9da6455-213d-42c9-9a79-3e9149a57833",
"CustomerSince@odata.type":"Edm.DateTime",
"CustomerSince":"2008-07-10T00:00:00",
"IsActive":true,
"NumOfOrders@odata.type":"Edm.Int64",
"NumOfOrders":"255",
"PartitionKey":"mypartitionkey",
"RowKey":"myrowkey1",
}
Wenn ein Client eine Gruppe von Entitäten in Azure Table Storage abfragt, antwortet der Dienst mit einer JSON-Nutzlast (Details zum Abfragevorgang finden Sie unter Abfrageentitäten ). Der Feed kann eine der folgenden drei Informationsebenen einschließen: keine Metadaten, minimale Metadaten oder vollständige Metadaten. Die einzelnen Ebenen werden anhand der folgenden Beispiele veranschaulicht:
Keine Metadaten:
{
"value":[
{
"PartitionKey":"Customer03",
"RowKey":"Name",
"Timestamp":"2013-08-09T18:55:48.3402073Z",
"CustomerSince":"2008-10-01T15:25:05.2852025Z",
}
}
Minimale Metadaten:
{
"odata.metadata":"https://myaccount.table.core.windows.net/$metadata#Customers,
"value":[
{
"PartitionKey":"Customer03",
"RowKey":"Name",
"Timestamp":"2013-08-09T18:55:48.3402073Z",
"CustomerSince@odata.type":"Edm.DateTime",
"CustomerSince":"2008-10-01T15:25:05.2852025Z",
}
}
Vollständige Metadaten:
{
"odata.metadata":"https://myaccount.table.core.windows.net/$metadata#Customers",
"value":[
{
"odata.type":"myaccount.Customers",
"odata.id":"https://myaccount.table.core.windows.net/Customers(PartitionKey='Customer03',RowKey='Name')",
"odata.etag":"W/\"0x5B168C7B6E589D2\"",
"odata.editLink":"Customers(PartitionKey='Customer03',RowKey='Name')",
"PartitionKey":"Customer03,
"RowKey":"Name",
"Timestamp@odata.type":"Edm.DateTime",
"Timestamp":"2013-08-09T18:55:48.3402073Z",
"CustomerSince@odata.type":"Edm.DateTime",
"CustomerSince":"2008-10-01T15:25:05.2852025Z",
}
}
Weitere Informationen zum OData-JSON-Format finden Sie in der OData JSON Format Version 4.0-Spezifikation in Verbindung mit dem Dokument [MS-ODATAJSON]: OData Protocol JSON Format Standards Support Document.
Atom format (application/atom+xml) (nur Versionen vor 2015-12-11)
Atom ist ein XML-basiertes Dokumentformat, das Sammlungen verwandter Informationen beschreibt, die als Feeds bezeichnet werden. Feeds setzen sich aus einer Reihe von Elementen zusammen, die als Einträge bezeichnet werden. AtomPub definiert zusätzliche Formatkonstrukte für Einträge und Feeds, damit die von ihnen dargestellten Ressourcen leicht kategorisiert, gruppiert, bearbeitet und ermittelt werden können. Da Atom jedoch nicht definiert, wie strukturierte Daten mit Feeds codiert werden, definiert OData eine Reihe von Konventionen für die Darstellung strukturierter Daten in einem Atom-Feed, um die Übertragung strukturierter Inhalte durch dienste basierend auf OData zu ermöglichen.
Der folgende OData-Beispieleintrag veranschaulicht beispielsweise das Atom-Format, das über eine Anforderung zum Einfügen einer Entität in Azure Table Storage mithilfe der REST-API gesendet wird (Details zum Einfügevorgang finden Sie unter Entität einfügen ):
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entry xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="https://www.w3.org/2005/Atom">
<title />
<author>
<name />
</author>
<id />
<content type="application/xml">
<m:properties>
<d:Address>Mountain View</d:Address>
<d:Age m:type="Edm.Int32">23</d:Age>
<d:AmountDue m:type="Edm.Double">200.23</d:AmountDue>
<d:BinaryData m:type="Edm.Binary" m:null="true" />
<d:CustomerCode m:type="Edm.Guid">c9da6455-213d-42c9-9a79-3e9149a57833</d:CustomerCode>
<d:CustomerSince m:type="Edm.DateTime">2008-07-10T00:00:00</d:CustomerSince>
<d:IsActive m:type="Edm.Boolean">true</d:IsActive>
<d:NumOfOrders m:type="Edm.Int64">255</d:NumOfOrders>
<d:PartitionKey>mypartitionkey</d:PartitionKey>
<d:RowKey>myrowkey1</d:RowKey>
</m:properties>
</content>
</entry>
Wenn ein Client eine Gruppe von Entitäten im Tabellenspeicher abfragt, antwortet der Dienst mit einem Atom-Feed, bei dem es sich um eine Sammlung von Atom-Einträgen handelt (Details zum Abfragevorgang finden Sie unter Abfrageentitäten ):
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<feed xml:base="https://myaccount.table.core.windows.net/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="https://www.w3.org/2005/Atom">
<title type="text">Customers</title>
<id>https://myaccount.table.core.windows.net/Customers</id>
<link rel="self" title="Customers" href="Customers" />
<entry m:etag="W/"0x5B168C7B6E589D2"">
<id>https://myaccount.table.core.windows.net/Customers(PartitionKey='Customer03',RowKey='Name')</id>
<title type="text"></title>
<updated>2008-10-01T15:26:13Z</updated>
<author>
<name />
</author>
<link rel="edit" title="Customers" href="Customers (PartitionKey='Customer03',RowKey='Name')" />
<category term="myaccount.Customers" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<content type="application/xml">
<m:properties>
<d:PartitionKey>Customer03</d:PartitionKey>
<d:RowKey>Name</d:RowKey> <d:CustomerSince m:type="Edm.DateTime">2008-10-01T15:25:05.2852025Z</d:CustomerSince>
</m:properties>
</content>
</entry>
</feed>
Eigenschaftstypen in einem Atom-Feed
Eigenschaftendatentypen werden durch die OData-Protokollspezifikation definiert. Nicht alle von der Spezifikation definierten Datentypen werden vom Tabellendienst unterstützt. Informationen zu den unterstützten Datentypen und deren Zuordnung zu CLR-Typen (Common Language Runtime) finden Sie unter Grundlegendes zum Tabellendienstdatenmodell.
Eine Eigenschaft kann mit oder ohne einen expliziten Datentyp angegeben werden. Wenn der Typ ausgelassen wird, wird die Eigenschaft automatisch als Datentyp Edm.String
erstellt.
Wenn eine Eigenschaft mit einem expliziten Typ erstellt wird, enthält eine Abfrage, die die Entität zurückgibt, diesen Typ innerhalb des Atom-Feeds, sodass Sie den Typ einer vorhandenen Eigenschaft bei Bedarf bestimmen können. Sie sollten den Typ einer Eigenschaft kennen, wenn Sie eine Abfrage mit einem Filter für diese Eigenschaft erstellen. Weitere Informationen finden Sie unter Abfragen von Tabellen und Entitäten.
Für Double
Eigenschaften werden die Werte NaN
, INF
und -INF
in Atom verwendet, um keine Zahl, positive Unendlichkeit bzw. negative Unendlichkeit anzugeben. Die Formulare Infinity
und -Infinity
werden ebenfalls akzeptiert. Der Tabellendienst unterstützt keine negative Version von NaN
. Im Atom-Format wird zwischen positiver und negativer Null unterschieden.
Weitere Informationen
Festlegen der Header für die OData-Datendienstversion
Versioning for the Azure Storage Services (Versionsverwaltung für Azure Storage-Dienste)
Konzepte des Tabellenspeicherdiensts