Dopo aver creato un paio di API moderatamente complesse, entrambe in Laravel, apprezzo il valore della trasformazione dei dati prima di inviarli in una risposta.
Ciò di cui sto combattendo è come devono essere gestiti questi dati quando ritorna, quindi per creare e soprattutto aggiornare i metodi. Dovrebbe essere trasformato (ma al contrario)?
Ad esempio, supponiamo di avere il seguente trasformatore di attività:
class ContractTransformer extends Transformer
{
/**
* @param $task
* @return array
*/
public function transform($task)
{
return [
'id' => $task['id'],
'title' => $task['title'],
'description' => $task['description'],
'due_date' => $task['end_date']
];
}
}
Si noti che il valore per la colonna 'end_date' nel database viene restituito come 'due_data' - un esempio primitivo di restituzione del nome della colonna in un modo più intuitivo.
Diciamo che un utente che utilizza questa API e costruisce il front-end con Angular / React o un altro framework, riceve un valore per 'due_date' e quindi sicuramente si aspetterebbe di rimandarlo (per un'operazione di aggiornamento) come ' due_date 'anziché' end_date '?
Quindi abbiamo il problema (specialmente per oggetti di grandi dimensioni con molti campi) di dovendo fare qualcosa di simile al seguente:
$task = Task::find($id);
$task->title = $request->input('title');
$task->description = $request->input('description');
// and so on...
$task->save();
Piuttosto che usare:
$request->all();
E significa che se cambiano i nomi delle colonne dobbiamo aggiornare anche tutti i metodi di aggiornamento.
C'è un buon modo per gestirlo? I dati dovrebbero essere "ri-trasformati"?