Best practice per il payload dei risultati REST quando il campo può avere valori singoli o multipli

3

Ho un endpoint dell'API REST in cui il chiamante può fornire alcuni filtri opzionali per i risultati.

GET api/inventory

Ad esempio, un membro oggetto di una richiesta GET può apparire come il seguente

{
   "books" : [
      {
        "id" : 1,
        "description": "this is book 1"
      }       
    ] ,
   "pencils" : [
        {
        "id" : 1,
        "description": "this is pencil 1"
        }
    ]
 }
 ....

Ora, questo potrebbe avere filtri opzionali

GET api/inventory?id=true&description=false

Poiché i consumatori possono solo volere gli id, quindi abbiamo un solo campo, quindi non abbiamo davvero bisogno di un oggetto per ogni entità.

In questo caso, è "best practice" per

  1. Mantieni la stessa forma di dati, ma includi solo il campo singolo

es

{
   "books" : [
      {
        "id" : 1           
      }       
   ] 
   "pencils" : [
        {
        "id" : 1
         }
    ]
}
  1. Dato che c'è un solo campo, "appiattisci" l'oggetto, così ora abbiamo qualcosa come

    {    "libri": [1],    "matite": [1] }

L'opzione 1. è buona poiché mantiene sempre la stessa forma, ma 2. è più compatta quando abbiamo una sola proprietà per ogni oggetto.

So che in entrambi i casi funzionerà fintanto che sarà documentato, ma ti starai chiedendo se c'è qualche "buona pratica" accettata?

Grazie in anticipo per eventuali suggerimenti.

    
posta peterc 02.11.2018 - 03:17
fonte

1 risposta

5

Rendi la vita più difficile per tutti se utilizzi formati diversi. Non utilizzare un caso speciale per dizionari con una singola coppia chiave / valore.

Se vuoi una rappresentazione compatta e non importa se la gente ti odia, puoi memorizzare diciamo 10 libri come

books: {
    ids: [1,2,3,4,5,6,7,8,9,10],
    descriptions: ["first book", "second book", ..., "tenth book"]
}
    
risposta data 02.11.2018 - 03:45
fonte

Leggi altre domande sui tag