Payload-indeling voor Table-servicebewerkingen
De REST API van de Table-service ondersteunt ATOM en JSON als OData-nettoladingindelingen. Hoewel het ATOM-protocol wordt ondersteund voor alle versies van de Azure-opslagservices, wordt het JSON-protocol alleen ondersteund voor versie 2013-08-15 en hoger.
JSON is de aanbevolen nettoladingindeling. JSON wordt ondersteund voor versie 2013-08-15 en hoger. U moet JSON gebruiken met versie 2015-12-11 en hoger.
ATOM wordt ondersteund voor versies ouder dan 2015-12-11.
Notitie
De volgende REST API-bewerkingen zijn geen OData-API's en bieden momenteel geen ondersteuning voor JSON: Tabel-ACL ophalen, Tabel-ACL instellen, Eigenschappen van tabelservice ophalen en Eigenschappen van tabelservice instellen.
Als u de JSON- of ATOM-indeling wilt opgeven, geeft u de juiste waarden op voor de Content-Type
headers en Accept
(hieronder beschreven). Houd rekening met de volgende beperkingen:
De
Content-Type
header is vereist voor alle aanvragen die een OData-nettolading bevatten.Als de
Accept
header niet is opgegeven, wordt het inhoudstype van het antwoord standaard ingesteld opapplication/atom+xml
.Als u de
$format
URI-parameter opgeeft, wordt de waarde die is opgegeven in deAccept
aanvraagheader overschreven wanneer de versie van de OData-gegevensservice is ingesteld op 3.0. Zie De OData Data Service-versieheaders instellen voor meer informatie over de versie van de OData-service.
Als u de indeling van de nettolading wilt opgeven, stelt u de Content-Type
aanvraagheaders en Accept
in volgens de onderstaande tabel:
Payload-indeling | Koptekst van inhoudstype | Koptekst accepteren | Data Service Version (REST API-versie) | Ondersteunde API's |
---|---|---|---|---|
Atom |
application/atom+xml |
application/atom+xml |
1.0 (elke versie) 2.0 (18-08-2011 of hoger) 3.0 (2013-08-15 of hoger) |
Querytables CreateTable Tabel verwijderen Query-entiteiten Entiteiten invoegen Entiteit invoegen of samenvoegen Entiteit invoegen of vervangen Entiteit bijwerken Entiteit samenvoegen Entiteit verwijderen |
JSON |
application/json |
application/json;odata=nometadata application/json;odata=minimalmetadata application/json;odata=fullmetadata Zie de sectie JSON-indeling hieronder voor meer informatie. |
3.0 (2013-08-15 of hoger) | Querytables CreateTable Tabel verwijderen Query-entiteiten Entiteiten invoegen Entiteit invoegen of samenvoegen Entiteit invoegen of vervangen Entiteit bijwerken Entiteit samenvoegen Entiteit verwijderen |
XML |
application/xml |
application/xml |
N.v.t. | Tabel-ACL ophalen Tabel-ACL instellen Eigenschappen van tabelservice ophalen Eigenschappen van tabelservice instellen |
JSON-indeling (toepassing/json) (versies 2013-08-15 en hoger)
OData breidt de JSON-indeling uit door algemene conventies te definiƫren voor deze naam-waardeparen, vergelijkbaar met de ATOM-indeling die hierboven wordt beschreven. OData definieert een set canonieke aantekeningen voor besturingsinformatie, zoals id's, type en koppelingen. Zie Inleiding tot JSON voor meer informatie over de JSON-indeling.
Het belangrijkste voordeel van het gebruik van de JSON-indeling van OData is dat de voorspelbare delen van de nettolading kunnen worden weggelaten om de grootte van de nettolading te verkleinen. Als u deze gegevens aan de ontvangende kant opnieuw wilt instellen, worden expressies gebruikt om ontbrekende koppelingen te berekenen, informatie te typen en gegevens te beheren. Als u wilt bepalen wat er uit de nettolading wordt weggelaten, zijn er drie niveaus die u kunt opgeven als onderdeel van de Accept
header:
application/json;odata=nometadata
application/json;odata=minimalmetadata
application/json;odata=fullmetadata
De volgende ODATA-aantekeningen worden ondersteund door de Azure Table-service:
odata.metadata
: De metagegevens-URL voor een verzameling, entiteit, primitieve waarde of servicedocument.odata.id
: de entiteits-id, die doorgaans de URL naar de resource is.odata.editlink
: de koppeling die wordt gebruikt om de vermelding te bewerken/bij te werken, als de entiteit kan worden bijgewerkt en de odata.id geen URL vertegenwoordigt die kan worden gebruikt om de entiteit te bewerken.odata.type
: De typenaam van het object dat het bevat.odata.etag
: De ETag van de entiteit.PropertyName@odata.type
, voor aangepaste eigenschappen: de typenaam van de doeleigenschap.PropertyName@odata.type
, voor systeemeigenschappen (bijvoorbeeld dePrimaryKey
eigenschappen ,RowKey
enTimestamp
): de typenaam van de doeleigenschap.
De informatie in elk niveau wordt samengevat in de volgende tabel:
Annotations |
odata=fullmetadata |
odata=minimalmetadata |
odata=nometadata |
---|---|---|---|
odata.metadata |
Ja | Ja | Nee |
odata.id |
Ja | Nee | Nee |
odata.editlink |
Ja | Nee | Nee |
odata.type |
Ja | Nee | Nee |
odata.etag |
Ja | Nee | Nee |
PropertyName@odata.type voor aangepaste eigenschappen |
Ja | Ja | Nee |
PropertyName@odata.type voor systeemeigenschappen |
Ja | Nee | Nee |
Eigenschapstypen in een JSON-feed
De odata.type
aantekening wordt gebruikt in de OData JSON-indeling om het type van een open eigenschap te bepalen. Deze aantekening is aanwezig wanneer aan alle onderstaande voorwaarden is voldaan:
Het JSON-besturingsniveau is ingesteld op
odata=minimalmetadata
ofodata=fullmetadata
, zoals besproken in de sectie JSON-indeling .De eigenschap is een aangepaste eigenschap. Houd er rekening mee dat voor Azure-tabellen alleen de
PartitionKey
eigenschappen ,RowKey
enTimestamp
systeemeigenschappen zijn en dat hun typegegevens worden gedeclareerd in$metadata
. De typeaantekening voor deze eigenschappen is alleen aanwezig wanneer het besturingselementniveau is ingesteld opodata=fullmetadata
. Zie Inzicht in het tabelservicegegevensmodel voor meer informatie.Het type van de eigenschap kan niet worden bepaald met de heuristiek van typedetectie die in de onderstaande tabel wordt samengevat.
Edm-type | aantekening voor odata.type vereist | JSON-type |
---|---|---|
Edm.Binary |
Ja | Tekenreeks |
Edm.Boolean |
Nee | Literals |
Edm.DateTime |
Ja | Tekenreeks |
Edm.Double |
Nee | Numeriek (bevat een decimaalteken) |
Edm.Guid |
Ja | Tekenreeks |
Edm.Int32 |
Nee | Numeriek (bevat geen decimaalteken) |
Edm.Int64 |
Ja | Tekenreeks |
Edm.String |
Nee | Tekenreeks |
n.v.t. | Nee | Null |
De Tabelservice bewaart null
geen waarden voor eigenschappen. Bij het schrijven van een entiteit kan een null
waarde worden opgegeven met of zonder een odata.type-aantekening en wordt elke eigenschap met een null
waarde verwerkt alsof de aanvraag die eigenschap niet bevat.
Null
eigenschapswaarden worden nooit geretourneerd bij het uitvoeren van query's op entiteiten.
Voor Edm.Double worden de waarden NaN
, Infinity
en -Infinity
weergegeven in JSON met behulp van het type String
, en is een odata.type-aantekening vereist. De Table-service biedt geen ondersteuning voor een negatieve versie van NaN
en maakt in JSON-indeling geen onderscheid tussen positieve en negatieve nul (het wordt behandeld -0.0
als 0.0
).
De volgende JSON-entiteit biedt een voorbeeld voor elk van de acht verschillende eigenschapstypen:
{
"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"
}
Omdat PartitionKey
en RowKey
systeemeigenschappen zijn, wat betekent dat alle tabelrijen deze eigenschappen moeten definiƫren, wordt hun typeaantekening niet weergegeven in de entiteit. Deze eigenschappen zijn vooraf gedefinieerd als het type Edm.String
. De andere eigenschappen zijn echter aangepaste eigenschappen en bevatten daarom typegegevens die overeenkomen met een van de ondersteunde primitieve typen in de bovenstaande tabel.
Voorbeelden:
In de volgende OData-voorbeeldvermelding ziet u de JSON-indeling die is verzonden als een aanvraag voor het invoegen van een entiteit in Azure Table Storage (zie Entiteit invoegen voor meer informatie over de invoegbewerking):
{
"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",
}
Wanneer een client een query uitvoert op een set entiteiten in Azure Table Storage, reageert de service met een JSON-nettolading (zie Query-entiteiten voor meer informatie over de querybewerking). De feed kan een van de drie informatieniveaus bevatten: geen metagegevens, minimale metagegevens of volledige metagegevens. In de volgende voorbeelden ziet u elk type:
Geen metagegevens:
{
"value":[
{
"PartitionKey":"Customer03",
"RowKey":"Name",
"Timestamp":"2013-08-09T18:55:48.3402073Z",
"CustomerSince":"2008-10-01T15:25:05.2852025Z",
}
}
Minimale metagegevens:
{
"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",
}
}
Volledige metagegevens:
{
"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",
}
}
Zie de specificatie OData JSON Format Version 4.0 in combinatie met het ondersteuningsdocument [MS-ODATAJSON]: OData Protocol JSON Format Standards Support Document voor meer informatie over de OData JSON-indeling.
Atom-indeling (toepassing/atom+xml) (alleen eerdere versies dan 11-12-2015)
Atom is een op XML gebaseerde documentindeling waarin verzamelingen gerelateerde informatie worden beschreven die feeds worden genoemd. Feeds bestaan uit een aantal items, ook wel vermeldingen genoemd. AtomPub definieert aanvullende indelingsconstructies voor vermeldingen en feeds, zodat de resources die ze vertegenwoordigen eenvoudig kunnen worden gecategoriseerd, gegroepeerd, bewerkt en gedetecteerd. Omdat Atom echter niet definieert hoe gestructureerde gegevens worden gecodeerd met feeds, definieert OData een set conventies voor het weergeven van gestructureerde gegevens in een Atom-feed om overdracht van gestructureerde inhoud door services op basis van OData mogelijk te maken.
In de volgende OData-voorbeeldvermelding ziet u bijvoorbeeld de Atom-indeling die is verzonden via een aanvraag voor het invoegen van een entiteit in Azure Table Storage met behulp van de REST API (zie Entiteit invoegen voor meer informatie over de invoegbewerking):
<?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>
Wanneer een client een query uitvoert op een set entiteiten in Table Storage, reageert de service met een Atom-feed, een verzameling Atom-vermeldingen (zie Query-entiteiten voor meer informatie over de querybewerking):
<?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>
Eigenschapstypen in een Atom-feed
Gegevenstypen van eigenschappen worden gedefinieerd door de OData Protocol-specificatie. Niet alle gegevenstypen die door de specificatie zijn gedefinieerd, worden ondersteund door de Table-service. Zie Understanding the Table Service Data Model (Engelstalig) voor meer informatie over de ondersteunde gegevenstypen en hoe deze worden toegewezen aan common language runtime (CLR)-typen.
Een eigenschap kan worden opgegeven met of zonder een expliciet gegevenstype. Als u het type weglaat, wordt de eigenschap automatisch gemaakt als gegevenstype Edm.String
.
Als een eigenschap is gemaakt met een expliciet type, bevat een query die de entiteit retourneert dat type in de Atom-feed, zodat u indien nodig het type van een bestaande eigenschap kunt bepalen. Het is belangrijk om het type van een eigenschap te kennen wanneer u een query maakt die op die eigenschap filtert. Zie Query's uitvoeren op tabellen en entiteiten voor meer informatie.
Voor Double
eigenschappen worden de waarden NaN
, INF
, en -INF
gebruikt in Atom om respectievelijk geen getal, positieve oneindigheid en negatieve oneindigheid aan te geven. De formulieren Infinity
en -Infinity
worden ook geaccepteerd. De Table-service biedt geen ondersteuning voor een negatieve versie van NaN
. In Atom-indeling wordt onderscheid gemaakt tussen positieve en negatieve nul.
Zie ook
De OData Data Service-versieheaders instellen
Versiebeheer voor Azure Storage Services
Concepten van Table Service