Condividi tramite


Intestazione della risposta della posizione nell'operazione REST Create

Per gli endpoint REST, l'intestazione della Location risposta indica ai client dove recuperare una risorsa appena creata. Il generatore di API dati (DAB) restituisce Location per POST gli inserimenti. Per PUT o PATCH upsert che creano nuove righe, l'intestazione può essere omessa.

Quando DAB imposta l'intestazione Location

Scenario Codice di stato Intestazione percorso (comportamento corrente)
POST crea una nuova riga (tabella) 201 Creato Presente: segmenti di percorso chiave primaria, ad esempio id/123 o categoryid/3/pieceid/1.
POST esegue la stored procedure che restituisce nuove righe 201 Creato Presente se la chiave pubblica può essere derivata; può essere vuoto quando non può.
PUT upsert aggiorna la riga esistente 200 Va bene Non presente
PUT upsert inserisce una nuova riga (nessuna If-Match) 201 Creato Può essere omesso; non fare affidamento su Location
PATCH upsert aggiorna la riga esistente 200 Va bene Non presente
PATCH upsert inserisce una nuova riga (nessuna If-Match) 201 Creato Può essere omesso; non fare affidamento su Location
PUT / PATCH con If-Match: * e riga mancante 404 Non trovato Non presente
Qualsiasi aggiornamento (riga esistente) 200 Va bene Non presente

Comportamento

  • Le chiavi primarie composite vengono visualizzate come segmenti ordinati, ad esempio book_id/1/id/5001 o categoryid/3/pieceid/1.
  • I mapping dei nomi di colonna (alias) usano i nomi di campo esposti da REST nel percorso.

Esempio: POST per la creazione di un nuovo elemento

Richiesta

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

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

Risposta

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
}

Il client può ora GET http://localhost:50246/api/Books/id/123.

Esempio: inserimento POST nella tabella chiave composita

Richiesta

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

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

Risposta

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

Esempio: PUT aggiorna una riga esistente (nessun percorso)

Richiesta

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

{
  "title": "Updated Title"
}

Risposta

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

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

(Nessuna Location intestazione).

Esempio: PUT che inserisce una nuova riga

Richiesta

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

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

Risposta

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

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

(Location l'intestazione può essere omessa qui.

Esempio: PUT con If-Match e riga mancante

Richiesta

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

{
  "title": "Attempted Update"
}

Risposta

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

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

(Nessuna Location intestazione).

Review

  • POST con creazione: Location è presente con il percorso della chiave primaria.
  • PUT o PATCH con aggiornamento: No Location.
  • PUT o PATCH con insert: restituisce 201 Created; Location può essere omesso (non dipende da esso).
  • Quando si include If-Match: *, DAB esegue un aggiornamento solo se la riga esiste già. Se la riga non è presente, la richiesta ha esito negativo 404 Not Found e non viene eseguito alcun inserimento, quindi non viene restituita alcuna Location intestazione.