Sto progettando un'API REST e nonostante la pesca a strascico una serie di guide pratiche non riesco a trovare molto relativa al migliori pratiche di gestire la disparità tra struttura di rappresentanza necessario per un POST
rispetto alla stessa struttura di rappresentazione restituita da un GET
.Handling differenza RESTful struttura di rappresentanza tra POST e GET
GET
per un manichino user
rappresentazione potrebbe essere simile a questo:
{
"id": 1234,
"created": "2012-04-23T18:25:43.511Z",
"username": "[email protected]",
"name": "John Doe"
}
Tuttavia, POST
per lo stesso manichino user
rappresentazione non può specificare alcune proprietà (vale a dire il id
e created
):
{
"username": "[email protected]",
"name": "John Doe"
}
Ovviamente questo è un esempio troppo semplificato ma dato che l'utente non può specificare determinati campi (e non potrebbe sempre s ovvio quali sono pertinenti al metodo applicato) è best practice per creare rappresentazioni separate per ciascuna o aspettarsi la versione più completa e gestire la disparità dei dati in modo trasparente sul server?
Nonostante l'apparente facilità di avere una singola rappresentazione e gestire il lato server di disparità, temo che questa sarebbe una brutta esperienza per un utente se non fosse chiaro quali valori possono essere specificati (o modificati usando PUT
per esempio). Se la tendenza è quella di creare rappresentazioni separate c'è una convenzione di denominazione da applicare alla definizione della rappresentazione?
ad es. i_user
per l'utente in entrata e o_user
per l'utente in uscita. O user_full
e user_min
o user
e .user
ecc
Aggiornamento: Il mio esempio eccessivamente semplificato forse non illustrano adeguatamente la questione. Immagina una rappresentazione che abbia 50 proprietà (ad esempio una rappresentazione server con tutti i suoi attributi di monitoraggio - cpu, ram, temp, storage_drive_a, storage_drive_b, file_permission ecc.) Di queste 50 proprietà, 30 sono proprietà di sola lettura e 20 di queste sono valori che può essere impostato.