Partilhar via


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

Para pontos de extremidade REST, o cabeçalho de resposta informa aos Location clientes onde recuperar um recurso recém-criado. O construtor de API de dados (DAB) 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 Location

Scenario Código de estado 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 Presente se a farmacocinética puder ser derivada; pode estar vazio quando não pode.
PUT upsert atualiza linha existente 200 OK Não 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 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 em falta 404 Não encontrado Não presente
Qualquer atualização (linha existente) 200 OK Não 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 nome 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 pode agora GET http://localhost:50246/api/Books/id/123.

Exemplo: inserção de POST na tabela de chaves composta

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 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"
}

(Sem 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( cabeçalho pode ser omitido aqui.)

Exemplo: PUT com If-Match e linha ausentes

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"
}

(Sem Location cabeçalho.)

Revisão

  • 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: Devoluções 201 Created; Location pode ser omitida (não dependa dela).
  • Quando você inclui If-Match: *o , o DAB só executa uma atualização se a linha já existir. Se a linha estiver faltando, a solicitação falhará com 404 Not Found e nenhuma inserção será executada, portanto, nenhum Location cabeçalho será retornado.