API REST: come PUT / POST diverse unità di dati

3

Ho una API che ho progettato che può restituire i dati in 2 diverse unità. Per spiegare questo sto tendendo a usare l'esempio di una misurazione, in particolare la temperatura. Tuttavia, il mio caso d'uso è leggermente più complesso, rappresentando un albero di valori con valori percentuali su ciascun livello, sia che lo si mostri in relazione al genitore, sia in cima all'albero.

Sto cercando come accettare un valore e un'unità per quei dati. Ad esempio, la mia API restituisce un sacco di temperature:

GET:{
  temperature_c: 20,
  temperature_f: 68
}

Ora diciamo che voglio impostare una temperatura, mi aspetterei solo di ricevere una temperatura in quanto non voglio costringere il consumatore a calcolare un valore che non conosce / cura.

Ma c'è qualche modo REST raccomandato per fare questo? Ho pensato di utilizzare un parametro di query:

PUT?unit=c:{
  temperature: 20
}

O per aggiungere un campo di unità nel corpo:

PUT:{
  temperature: 20,
  unit: c
}

Oppure, quello che sento è peggio, costringendo un consumatore a uno dei tipi:

PUT:{
  temperature_c: 20
}

Esiste un modo standard per affrontare questo problema? O qualche inconveniente significativo? O forse c'è un altro metodo che mi manca?

Modifica: Per informazioni sulla mia destinazione d'uso prevista, ho in programma di rappresentare una struttura ad albero che espone i pesi in due forme 'to top' e 'to parent'. To Top è il peso complessivo del nodo, in% dell'intero albero. To Parent è il peso del nodo, in% rispetto al suo genitore immediato. Ad esempio, immagina questa struttura ad albero e i pesi:

-- Nodes            To Top   To Parent
Root node           100      100
    Node 1.1        80       80
        Node 1.1.1  60       75
        Node 1.1.2  20       25
    Node 1.2        20       20
        Node 1.2.1  10       50
        Node 1.2.2  10       50

Posso facilmente convertirli tra di loro, tuttavia, se un consumatore ha manipolato To Parent, ad esempio, ritengo che non dovrebbero anche calcolare i pesi To Top prima di fare un PUT / POST.

    
posta David Lynn 22.06.2018 - 14:03
fonte

1 risposta

4

Consentire rappresentazioni diverse per gli stessi dati è abbastanza comune - per esempio, molti servizi web forniscono sia l'output XML che JSON scelto dal cliente.

Le tue opzioni sono perfette (anche forzando la rappresentazione, anche se potrebbe essere scomodo per alcuni clienti, purché tu sia coerente su questo, è qualcosa a cui saranno in grado di adattarsi). Oltre alle opzioni che hai già menzionato potresti anche avere URL leggermente diversi myservice/temperature/[celsius,fahrenheit] .

Detto questo, indicherai che il tuo caso è "più complesso" - non dici qual è il tuo problema esatto, quindi è difficile dire se qualcuno di questi sarebbe più o meno appropriato per il tuo particolare caso d'uso.

    
risposta data 22.06.2018 - 16:06
fonte

Leggi altre domande sui tag