Pedidos de Atualização com Serviço de Dados REST

O serviço de dados REST do WebSphere eXtreme Scale suporta pedidos de atualização para entidades, propriedades de primitivas de entidades e assim por diante.

Atualizar uma Entidade

Um Pedido UpdateEntity pode ser usado para atualizar uma entidade existente do eXtreme Scale. O cliente pode usar um método HTTP PUT para substituir ume entidade existente do eXtreme Scale ou usar um método HTTP MERGE para mesclar as mudanças em uma entidade existente do eXtreme Scale.

Ao atualizar a entidade, o cliente pode especificar se a entidade, além de ser atualizada, deve ser vinculada automaticamente a outras entidades existentes no serviço de dados que estão relacionadas por meio de associações com valor único.

A propriedade da entidade a ser atualizada está na carga útil do pedido. A propriedade é analisada pelo serviço de dados REST e configurada para a propriedade correspondente na entidade. Para o formato AtomPub, a propriedade é especificada como um elemento XML <d:PROPERTY_NAME>. Para JSON, a propriedade é especificada como uma propriedade de um objeto JSON.

Se uma propriedade estiver ausente na carga útil de solicitação, o serviço de dados REST configurará o valor de propriedade da entidade com o valor padrão Java para o método HTTP PUT. Entretanto, o banco de dados backend deve rejeitar um valor padrão, por exemplo, se a coluna não for anulável no banco de dados. Então, um código de resposta 500 (Erro do Servidor Interno) é retornado para indicar um Erro do Servidor Interno. Se uma propriedade estiver ausente na carga útil de solicitação HTTP MERGE, o serviço de dados REST não alterará o valor da propriedade existente.

Se houver propriedades duplicadas especificadas na carga útil, a última propriedade será usada. Todos os valores anteriores com o mesmo nome da propriedade serão ignorados pelo serviço de dados REST.

Se a carga útil contiver uma propriedade não existente, o serviço de dados REST irá retornar um código de resposta 400 (Pedido Inválido) para indicar que o pedido enviado pelo cliente estava sintaticamente incorreto.

Como parte da serialização de um recurso, se a carga útil de um pedido de Atualização contiver alguma das propriedades-chave para a entidade, o serviço de dados REST irá ignorar esses valores de chave já que as chaves de entidades são imutáveis.

Para obter detalhes sobre o pedido UpdateEntity, consulte: Biblioteca MSDN: Pedido UpdateEntity.

Um pedido UpdateEntity atualiza o nome da cidade de Customer('IBM') para 'Raleigh'.

AtomPub

  • Método: PUT
  • URI do pedido: http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')
  • Cabeçalho do Pedido: Tipo de Conteúdo: application/atom+xml
  • Carga Útil de Pedido:
    <?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"
    />
     <title/>
     <updated>2009-07-28T21:17:50.609Z</updated>
     <author>
      <name />
     </author>
     <id />
     <content type="application/xml">
      <m:properties>
       <d:customerId>IBM</d:customerId>
       <d:city>Raleigh</d:city>
       <d:companyName>IBM Corporation</d:companyName>
       <d:contactName>Big Blue</d:contactName>
       <d:country>USA</d:country>
      </m:properties>
     </content>
    </entry>
  • Carga Útil de Resposta: Nenhuma
  • Código de Resposta: 204 Nenhum Conteúdo

JSON

  • Método: PUT
  • URI do pedido: http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')
  • Cabeçalho do Pedido: Tipo de Conteúdo: application/json
  • Carga Útil de Pedido:
    {"customerId":"IBM",
    "city":"Raleigh",
    "companyName":"IBM Corporation",
    "contactName":"Big Blue",
    "country": "USA",}
  • Carga Útil de Resposta: Nenhuma
  • Código de Resposta: 204 Nenhum Conteúdo

Atualizar uma Propriedade Primitiva da Entidade

O Pedido UpdatePrimitiveProperty pode atualizar um valor da propriedade de uma entidade do eXtreme Scale. A propriedade e o valor a serem atualizados estão na carga útil do pedido. A propriedade não pode ser uma propriedade-chave uma vez que o eXtreme Scale não permite que os clientes alterem as chaves de entidades.

Para obter mais detalhes sobre o pedido UpdatePrimitiveProperty, consulte: Biblioteca MSDN: Pedido UpdatePrimitiveProperty.

Veja aqui um exemplo de pedido UpdatePrimitiveProperty. Neste exemplo, atualizamos o nome da cidade de Customer('IBM') para 'Raleigh'.

AtomPub

  • Método: PUT
  • URI do Pedido: http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')/city
  • Cabeçalho do Pedido: Tipo de Conteúdo: application/xml
  • Carga Útil de Pedido:
    <?xml version="1.0"
    encoding="ISO-8859-1"?>
    <city
    xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">
    	Raleigh
    </city>
  • Carga Útil de Resposta: Nenhuma
  • Código de Resposta: 204 Nenhum Conteúdo

JSON

  • Método: PUT
  • URI do Pedido: http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')/city
  • Cabeçalho do Pedido: Tipo de Conteúdo: application/json
  • Carga Útil do Pedido: {"city":"Raleigh"}
  • Carga Útil de Resposta: Nenhuma
  • Código de Resposta: 204 Nenhum Conteúdo

Atualizar um Valor de Propriedade Primitiva da Entidade

O Pedido UpdateValue pode atualizar um valor bruto da propriedade de uma entidade do eXtreme Scale. O valor a ser atualizado é representado como um valor bruto na carga útil do pedido. A propriedade não pode ser uma propriedade-chave uma vez que o eXtreme Scale não permite que os clientes alterem as chaves de entidades.

O tipo de conteúdo do pedido pode ser “text/plain” ou “application/octet-stream”, dependendo do tipo de propriedade. Para obter informações adicionais, consulte Recuperando Não Entidades com Serviços de Dados REST.

Para obter mais detalhes sobre o pedido UpdateValue, consulte: Biblioteca MSDN: Pedido UpdateValue

Veja aqui um exemplo do pedido UpdateValue. Neste exemplo, atualize o nome da cidade de Customer('IBM') para 'Raleigh'.

  • Método: PUT
  • URI do Pedido: http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')/city/$value
  • Cabeçalho do Pedido: Tipo de Conteúdo: text/plain
  • Carga Útil de Pedido: Raleigh
  • Carga Útil de Resposta: Nenhuma
  • Código de Resposta: 204 Nenhum Conteúdo

Atualizar um Link

O pedido UpdateLink pode ser usado para estabelecer uma associação entre duas instâncias de entidade do eXtreme Scale. A associação pode ser uma relação com valor único (para um) ou uma relação com diversos valores (para muitos).

A atualização de um link entre duas instâncias de entidade do eXtreme Scale pode estabelecer associações ou remover associações. Por exemplo, se o cliente estabelecer uma associação "para um" entre uma entidade Order(orderId=5000,customer_customerId='IBM') e a instância Customer('ALFKI'), ele precisará dessociar a entidade Order(orderId=5000,customer_customerId='IBM') e a entidade de sua instância Customer associada atualmente.

Se as instâncias de entidade especificadas no pedido UpdateLink não puderem ser localizadas, o serviço de dados REST retornará uma resposta 404 (Não Localizado).

Se o URI do pedido UpdateLink especificar uma associação não existente, o serviço de dados REST retornará uma resposta 404 (Não Localizado) para indicar que o link não pode ser localizado.

Se a URI especificada na carga útil do pedido UpdateLink não resolver para a mesma entidade ou a mesma chave conforme especificado na URI, se existir, o Serviço de Dados REST do eXtreme Scale retornará uma resposta 400 (Pedido Inválido).

Se a carga útil de solicitação de UpdateLink contiver diversos links, o serviço de dados REST analisará somente o primeiro link. O restante dos links será ignorado.

Para obter mais detalhes sobre o pedido UpdateLink, consulte: Biblioteca MSDN: Pedido UpdateLink.

Veja aqui um exemplo de pedido UpdateLink. Neste exemplo, atualizamos a relação do cliente da entidade Order(orderId=5000,customer_customerId='IBM') e de Customer('IBM') para Customer('IBM').

Lembre-se: O exemplo anterior é apenas ilustrativo. Como todas as associações normalmente são associações chave para uma grade particionada, o link não poderá ser alterado.

AtomPub

  • Método: PUT
  • URI de Pedido: http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Order(101)/$links/customer
  • Cabeçalho do Pedido: Tipo de Conteúdo: application/xml
  • Carga Útil de Pedido:
    <?xml version="1.0"
    encoding="ISO-8859-1"?>
    <uri>
    	http://host:1000/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')
    </uri>
  • Carga Útil de Resposta: Nenhuma
  • Código de Resposta: 204 Nenhum Conteúdo

JSON

  • Método: PUT
  • URI da Solicitação: http://localhost:8080/wxsrestservice/restservice/NorthwindGrid/Order(orderId=5000,customer_customerId='IBM')/$links/customer
  • Cabeçalho do Pedido: Tipo de Conteúdo: application/xml
  • Carga Útil da Solicitação: {"uri": "http://host:1000/wxsrestservice/restservice/NorthwindGrid/Customer('IBM')"}
  • Carga Útil de Resposta: Nenhuma
  • Código de Resposta: 204 Nenhum Conteúdo