Compartilhar via


O cabeçalho de resposta de local na operação de criação REST

Para pontos de extremidade REST, o cabeçalho de Location resposta informa aos clientes onde recuperar um recurso recém-criado. O DAB (Construtor de API de Dados) retorna Location para POST inserções. Para PUT ou PATCH upserts que criam novas linhas, o cabeçalho pode ser omitido.

Quando o DAB define o cabeçalho Local

Scenario Código de status Cabeçalho de localização (comportamento atual)
POST cria uma nova linha (tabela) 201 Criado Presente: segmentos de caminho de chave primária, por exemplo id/123 ou categoryid/3/pieceid/1.
POST executa o procedimento armazenado retornando novas linhas 201 Criado Apresentar se o PK pode ser derivado; pode estar vazio quando não puder.
PUT upsert atualiza linha existente 200 OK Não está presente
PUT upsert insere nova linha (sem If-Match) 201 Criado Pode ser omitido; não confie em Location
PATCH upsert atualiza linha existente 200 OK Não está presente
PATCH upsert insere nova linha (sem If-Match) 201 Criado Pode ser omitido; não confie em Location
PUT / PATCH com If-Match: * e linha ausente 404 Não Encontrado Não está presente
Qualquer atualização (a linha existia) 200 OK Não está presente

Comportamento

  • As chaves primárias compostas aparecem como segmentos ordenados, por exemplo book_id/1/id/5001 ou categoryid/3/pieceid/1.
  • Os mapeamentos de nomes de coluna (aliases) usam os nomes de campo expostos por REST no caminho.

Exemplo: POST criando um novo item

Solicitação

POST /api/Books
Content-Type: application/json

{
  "title": "New Book",
  "publisher_id": 42
}

Resposta

HTTP/1.1 201 Created
Location: http://localhost:50246/api/Books/id/123
Content-Type: application/json

{
  "id": 123,
  "title": "New Book",
  "publisher_id": 42
}

O cliente agora GET http://localhost:50246/api/Books/id/123pode .

Exemplo: POST inserindo na tabela de chaves compostas

Solicitação

POST /api/Inventory
Content-Type: application/json

{
  "categoryid": 3,
  "pieceid": 1,
  "categoryName": "SciFi"
}

Resposta

HTTP/1.1 201 Created
Location: http://localhost:50246/api/Inventory/categoryid/3/pieceid/1
Content-Type: application/json

{
  "categoryid": 3,
  "pieceid": 1,
  "categoryName": "SciFi"
}

Exemplo: PUT atualizando a linha existente (sem Local)

Solicitação

PUT http://localhost:50246/api/Books/id/1
Content-Type: application/json

{
  "title": "Updated Title"
}

Resposta

HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 1,
  "title": "Updated Title"
}

(Nenhum Location cabeçalho.)

Exemplo: PUT inserindo nova linha

Solicitação

PUT http://localhost:50246/api/Books/id/500
Content-Type: application/json

{
  "title": "Inserted via PUT",
  "publisher_id": 7
}

Resposta

HTTP/1.1 201 Created
Content-Type: application/json

{
  "id": 500,
  "title": "Inserted via PUT",
  "publisher_id": 7
}

(Location o cabeçalho pode ser omitido aqui.)

Exemplo: PUT com If-Match e linha ausente

Solicitação

PUT http://localhost:50246/api/Books/id/500
If-Match: *
Content-Type: application/json

{
  "title": "Attempted Update"
}

Resposta

HTTP/1.1 404 Not Found
Content-Type: application/json

{
  "error": "No Update could be performed, record not found"
}

(Nenhum Location cabeçalho.)

Review

  • POST com criação: Location está presente com o caminho da chave primária.
  • PUT ou PATCH com atualização: Não Location.
  • PUT ou PATCH com inserção: Retorna 201 Created; Location pode ser omitido (não dependa dele).
  • Quando você incluir If-Match: *, o DAB só executará uma atualização se a linha já existir. Se a linha estiver ausente, a solicitação falhará 404 Not Found e nenhuma inserção será executada, portanto, nenhum Location cabeçalho será retornado.