Compartir a través de


Encabezado de respuesta de ubicación en la operación de creación de REST

En el caso de los puntos de conexión REST, el Location encabezado de respuesta indica a los clientes dónde recuperar un recurso recién creado. Data API Builder (DAB) devuelve Location para POST las inserciones. Para PUT o PATCH upserts que crean nuevas filas, se puede omitir el encabezado.

Cuando DAB establece el encabezado Location

Scenario Código de estado Encabezado de ubicación (comportamiento actual)
POST crea una nueva fila (tabla) 201 Creado Presente: segmentos de ruta de acceso de clave principal, por ejemplo id/123 o categoryid/3/pieceid/1.
POST ejecuta el procedimiento almacenado que devuelve nuevas filas. 201 Creado Presente si se puede derivar PK; puede estar vacío cuando no lo pueda.
PUT upsert actualiza la fila existente 200 Ok No está presente
PUT upsert inserta una nueva fila (sin If-Match) 201 Creado Se puede omitir; no se basan en Location
PATCH upsert actualiza la fila existente 200 Ok No está presente
PATCH upsert inserta una nueva fila (sin If-Match) 201 Creado Se puede omitir; no se basan en Location
PUT / PATCH con If-Match: * y falta fila 404 No encontrado No está presente
Cualquier actualización (existe una fila) 200 Ok No está presente

Comportamiento

  • Las claves principales compuestas aparecen como segmentos ordenados, por ejemplo book_id/1/id/5001 , o categoryid/3/pieceid/1.
  • Las asignaciones de nombres de columna (alias) usan los nombres de campo expuestos por REST en la ruta de acceso.

Ejemplo: POST creando un nuevo elemento

Solicitud

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

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

Respuesta

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
}

El cliente ahora GET http://localhost:50246/api/Books/id/123puede .

Ejemplo: INSERCIÓN POST en la tabla de claves compuestas

Solicitud

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

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

Respuesta

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

Ejemplo: PUT actualizando la fila existente (sin ubicación)

Solicitud

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

{
  "title": "Updated Title"
}

Respuesta

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

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

(Sin Location encabezado).

Ejemplo: PUT que inserta una nueva fila

Solicitud

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

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

Respuesta

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

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

(Location el encabezado puede omitirse aquí).

Ejemplo: PUT con If-Match y la fila que faltan

Solicitud

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

{
  "title": "Attempted Update"
}

Respuesta

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

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

(Sin Location encabezado).

Revisión

  • POST con creación: Location está presente con la ruta de acceso de la clave principal.
  • PUT o PATCH con actualización: No Location.
  • PUT o PATCH con insert: devuelve 201 Created; Location se puede omitir (no depende de él).
  • Cuando se incluye If-Match: *, DAB solo realiza una actualización si la fila ya existe. Si falta la fila, se produce un error en la solicitud y 404 Not Found no se realiza ninguna inserción, por lo que no se devuelve ningún Location encabezado.