RESTITAMENTE restituendo dati di diagnostica con risposta

6

In un'API REST con cui sto lavorando, in determinate circostanze (ex / richiesta originata in rete) i dati di diagnostica vengono restituiti con la risposta. In questo momento, una proprietà viene aggiunta all'oggetto radice della risposta con le informazioni diagnostiche (magicamente dal framework).

Ad esempio:

{
 "results" : [ ],
 "timestamp" : 1427734909284
}

diventa:

 {
  "results" : [ ],
  "timestamp" : 1427734909284,
  "additionalinfo" : [POTENTIALLY A BUNCH OF JSON DATA THAT CAN INCLUDE TIMING,
                      DESCRIPTIONS OR RECOVERABLE ERRORS, AND CODE PATH INFO]
 }

Questo non è mai andato d'accordo con me, ma in questo momento sto tentando di sviluppare un po 'di documentazione in questo progetto, il che rende ancora più problematico.

È questo il modo RESTfully corretto in cui restituire questi dati? Dovrebbe essere invece un header di risposta? Perché / Perché no?

    
posta smp7d 30.03.2015 - 19:56
fonte

1 risposta

6

Esistono due modi per visualizzare le informazioni diagnostiche: parte di una risorsa esistente o una risorsa separata. Il modo in cui lo visualizzi dipende dai requisiti dell'applicazione.

Se le informazioni fanno parte di una risorsa esistente, allora hai la rappresentazione più "RESTful" possibile. Si noti che REST non pone rigorosamente requisiti sulla struttura degli oggetti di risposta. Usa qualunque cosa sia conveniente. Tuttavia, questo approccio potrebbe non essere compatibile con il caching delle risorse poiché la diagnostica potrebbe essere obsoleta con le richieste successive. Se non vuoi memorizzare nella cache le risorse durante la raccolta dei dati diagnostici, allora ottimo.

Se le informazioni sono risorse proprie, fare riferimento a HATEOAS e includere un collegamento alla risorsa diagnostica nella risposta. Questo approccio richiede un modo per mantenere la diagnostica sul server. Dovresti anche utilizzare un formato JSON compatibile con REST come HAL JSON se sei preoccupato delle risposte "RESTful".

L'invio di diagnostica in un'intestazione di risposta dovrebbe essere l'ultima opzione da considerare. Devi codificare / decodificare correttamente i dati secondo la specifica HTTP / 1.1. Inoltre, le intestazioni HTTP / 1.1 non vengono compresse, quindi le risposte saranno più grandi e lente di quanto sarebbero se le diagnostiche fossero parte del corpo. Non c'è niente di intrinsecamente sbagliato in questo, solo più trade-off da considerare.

    
risposta data 31.03.2015 - 20:51
fonte

Leggi altre domande sui tag