Formato payload para operações do serviço Tabela
A API REST do serviço Tabela suporta ATOM e JSON como formatos de payload OData. Embora o protocolo ATOM seja suportado para todas as versões dos serviços de armazenamento do Azure, o protocolo JSON é suportado apenas para a versão 2013-08-15 e mais recente.
JSON é o formato de payload recomendado. O JSON é suportado para a versão 2013-08-15 e mais recente. Tem de utilizar jSON com a versão 2015-12-11 e posterior.
A ATOM é suportada para versões anteriores a 2015-12-11.
Nota
As seguintes operações da API REST não são APIs OData e atualmente não suportam JSON: Obter ACL de Tabela, Definir ACL de Tabela, Obter Propriedades do Serviço de Tabela e Definir Propriedades do Serviço de Tabela.
Para especificar o formato JSON ou ATOM, especifique os valores adequados para os Content-Type
cabeçalhos e Accept
(descritos abaixo). Tenha em atenção as seguintes restrições:
O
Content-Type
cabeçalho é necessário para todos os pedidos que contenham um payload OData.Se o
Accept
cabeçalho não for fornecido, o tipo de conteúdo da resposta é predefinido paraapplication/atom+xml
.Especificar o
$format
parâmetro URI substitui o valor especificado no cabeçalho doAccept
pedido, quando a versão do serviço de dados OData está definida como 3.0. Veja Definir os Cabeçalhos de Versão do OData Data Service para obter detalhes sobre a versão do serviço OData.
Para especificar o formato payload, defina os Content-Type
cabeçalhos e Accept
o pedido de acordo com a tabela abaixo:
Formato payload | Cabeçalho do Tipo de Conteúdo | Aceitar Cabeçalho | Versão do Serviço de Dados (Versão da API REST) | APIs suportadas |
---|---|---|---|---|
Atom |
application/atom+xml |
application/atom+xml |
1.0 (Qualquer versão) 2.0 (2011-08-18 ou posterior) 3.0 (2013-08-15 ou posterior) |
QueryTables Criar Tabela Eliminar Tabela Entidades de Consulta Inserir Entidades Inserir ou Intercalar Entidade Inserir ou Substituir Entidade Atualizar Entidade Entidade intercalar Eliminar Entidade |
JSON |
application/json |
application/json;odata=nometadata application/json;odata=minimalmetadata application/json;odata=fullmetadata Para obter detalhes, veja a secção Formato JSON abaixo. |
3.0 (2013-08-15 ou posterior) | QueryTables Criar Tabela Eliminar Tabela Entidades de Consulta Inserir Entidades Inserir ou Intercalar Entidade Inserir ou Substituir Entidade Atualizar Entidade Entidade intercalar Eliminar Entidade |
XML |
application/xml |
application/xml |
N/D | Obter ACL de Tabela Definir ACL de Tabela Obter Propriedades do Serviço de Tabelas Definir Propriedades do Serviço de Tabela |
Formato JSON (aplicação/json) (Versões 2013-08-15 e posterior)
O OData expande o formato JSON ao definir convenções gerais para estes pares nome-valor, semelhantes ao formato ATOM descrito acima. O OData define um conjunto de anotações canónicas para informações de controlo, tais como IDs, tipo e ligações. Para obter detalhes sobre o formato JSON, consulte Introdução ao JSON.
A principal vantagem de utilizar o formato JSON do OData é que as partes previsíveis do payload podem ser omitidas para reduzir o tamanho do payload. Para reconstituir estes dados na extremidade de receção, as expressões são utilizadas para calcular ligações em falta, escrever informações e controlar dados. Para controlar o que é omitido do payload, existem três níveis que pode especificar como parte do Accept
cabeçalho:
application/json;odata=nometadata
application/json;odata=minimalmetadata
application/json;odata=fullmetadata
As seguintes anotações ODATA são suportadas pelo serviço Tabela do Azure:
odata.metadata
: o URL de metadados de uma coleção, entidade, valor primitivo ou documento de serviço.odata.id
: O ID da entidade, que geralmente é o URL do recurso.odata.editlink
: a ligação utilizada para editar/atualizar a entrada, se a entidade for atualizável e o odata.id não representar um URL que possa ser utilizado para editar a entidade.odata.type
: o nome do tipo do objeto que contém.odata.etag
: O ETag da entidade.PropertyName@odata.type
, para propriedades personalizadas: o nome do tipo da propriedade de destino.PropertyName@odata.type
, para as propriedades do sistema (ou seja, asPrimaryKey
propriedades ,RowKey
eTimestamp
): o nome do tipo da propriedade de destino.
As informações incluídas em cada nível são resumidas na seguinte tabela:
Annotations |
odata=fullmetadata |
odata=minimalmetadata |
odata=nometadata |
---|---|---|---|
odata.metadata |
Yes | Yes | No |
odata.id |
Yes | No | No |
odata.editlink |
Yes | No | No |
odata.type |
Yes | No | No |
odata.etag |
Yes | No | No |
PropertyName@odata.type para propriedades personalizadas |
Yes | Yes | No |
PropertyName@odata.type para propriedades do sistema |
Yes | No | No |
Tipos de Propriedade num Feed JSON
A odata.type
anotação é utilizada no formato JSON OData para determinar o tipo de propriedade aberta. Esta anotação está presente quando todas as condições abaixo são satisfeitas:
O nível de controlo JSON está definido como
odata=minimalmetadata
ouodata=fullmetadata
, conforme discutido na secção Formato JSON .A propriedade é uma propriedade personalizada. Tenha em atenção que, para as tabelas do Azure, apenas as
PartitionKey
propriedades ,RowKey
eTimestamp
são propriedades do sistema e as respetivas informações de tipo são declaradas no$metadata
. O tipo de anotação para estas propriedades só está presente quando o nível de controlo está definido comoodata=fullmetadata
. Para obter mais informações, veja Understanding the Table Service Data Model (Compreender o Modelo de Dados do Serviço de Tabelas).Não é possível determinar o tipo da propriedade através da heurística de deteção de tipo resumida na tabela abaixo.
Tipo de Edm | odata.type anotação necessária | Tipo JSON |
---|---|---|
Edm.Binary |
Sim | String |
Edm.Boolean |
No | Literais |
Edm.DateTime |
Sim | String |
Edm.Double |
No | Numérico (contém ponto decimal) |
Edm.Guid |
Sim | String |
Edm.Int32 |
No | Numérico (não contém ponto decimal) |
Edm.Int64 |
Sim | String |
Edm.String |
Não | String |
n/a | No | Nulo |
O serviço Tabela não persiste null
nos valores das propriedades. Ao escrever uma entidade, um null
valor pode ser especificado com ou sem uma anotação odata.type e qualquer propriedade com um null
valor é processada como se o pedido não tivesse essa propriedade.
Null
os valores de propriedade nunca são devolvidos ao consultar entidades.
Para Edm.Double, os valores e Infinity
-Infinity
são representados NaN
em JSON com o tipo String
e é necessária uma anotação odata.type. O serviço Tabela não suporta uma versão negativa do NaN
e, no formato JSON, não distingue entre zero positivo e negativo (trata -0.0
como 0.0
).
A seguinte entidade JSON fornece um exemplo para cada um dos oito tipos de propriedade diferentes:
{
"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"
}
Uma vez PartitionKey
que e RowKey
são propriedades do sistema, o que significa que todas as linhas de tabela têm de definir estas propriedades, a anotação do tipo não aparece na entidade. Estas propriedades são predefinidas como tipo Edm.String
. No entanto, as outras propriedades são propriedades personalizadas e, portanto, contêm informações de tipo correspondentes a um dos tipos primitivos suportados na tabela acima.
Exemplos:
A seguinte entrada OData de exemplo demonstra o formato JSON enviado como um pedido para inserir uma entidade no armazenamento de Tabelas do Azure (veja Inserir Entidade para obter detalhes sobre a operação de inserção):
{
"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",
}
Quando um cliente consulta um conjunto de entidades no armazenamento de Tabelas do Azure, o serviço responde com um payload JSON (veja Entidades de Consulta para obter detalhes sobre a operação de consulta). O feed pode incluir um dos três níveis de informação: sem metadados, metadados mínimos ou metadados completos. Os exemplos seguintes demonstram cada tipo:
Sem metadados:
{
"value":[
{
"PartitionKey":"Customer03",
"RowKey":"Name",
"Timestamp":"2013-08-09T18:55:48.3402073Z",
"CustomerSince":"2008-10-01T15:25:05.2852025Z",
}
}
Metadados mínimos:
{
"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",
}
}
Metadados completos:
{
"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",
}
}
Para saber mais sobre o formato OData JSON, consulte a especificação OData JSON Format Version 4.0 (Formato JSON OData Versão 4.0 ), em conjunto com o Documento de Suporte de Normas de Formato JSON [MS-ODATAJSON]: Formato JSON do Protocolo OData.
Formato Atom (apenas aplicação/atom+xml) (Apenas versões anteriores a 2015-12-11)
O Atom é um formato de documento baseado em XML que descreve coleções de informações relacionadas referidas como feeds. Os feeds são compostos por vários itens, conhecidos como entradas. O AtomPub define construções de formato adicionais para entradas e feeds para que os recursos que representam possam ser facilmente categorizados, agrupados, editados e detetados. No entanto, uma vez que o Atom não define a forma como os dados estruturados são codificados com feeds, o OData define um conjunto de convenções para representar dados estruturados num feed Atom para permitir transferências de conteúdo estruturado por serviços baseados em OData.
Por exemplo, a seguinte entrada OData de exemplo demonstra o formato Atom enviado através de um pedido para inserir uma entidade no armazenamento de Tabelas do Azure com a API REST (veja Inserir Entidade para obter detalhes sobre a operação de inserção):
<?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>
Quando um cliente consulta um conjunto de entidades no Armazenamento de tabelas, o serviço responde com um feed Atom, que é uma coleção de entradas Atom (veja Entidades de Consulta para obter detalhes sobre a operação de consulta):
<?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>
Tipos de Propriedade num Feed Atom
Os tipos de dados de propriedade são definidos pela Especificação do Protocolo OData. Nem todos os tipos de dados definidos pela especificação são suportados pelo serviço Tabela. Para obter informações sobre os tipos de dados suportados e como mapeiam para tipos comuns de runtime de linguagem (CLR), veja Understanding the Table Service Data Model (Compreender o Modelo de Dados do Serviço de Tabelas).
Uma propriedade pode ser especificada com ou sem um tipo de dados explícito. Se o tipo for omitido, a propriedade é criada automaticamente como tipo Edm.String
de dados .
Se uma propriedade for criada com um tipo explícito, uma consulta que devolva a entidade inclui esse tipo no feed Atom, para que possa determinar o tipo de uma propriedade existente, se necessário. Conhecer o tipo de uma propriedade é importante quando está a construir uma consulta que filtra nessa propriedade. Para obter mais informações, veja Consultar Tabelas e Entidades.
Para Double
propriedades, os valores , INF
e -INF
são utilizados NaN
em Átomo para indicar não um número, infinito positivo e infinito negativo, respetivamente. Os formulários Infinity
e -Infinity
também são aceites. O serviço Tabela não suporta uma versão negativa do NaN
. No formato Atom, distingue entre zero positivo e negativo.
Consulte também
Definir os Cabeçalhos de Versão do Serviço de Dados OData
Versões para os Serviços de Armazenamento do Azure
Conceitos do Serviço Tabela