API REST che rispondono con array annidati

1

Vorrei conoscere la best practice per la progettazione di un'API REST per una risorsa con una relazione has_many con un'altra risorsa.

Nella mia app, companies ha molti technologies e technologies appartiene a molti companies . Nel frontend, voglio rendere le aziende e le loro tecnologie.

Voglio implementare /companies endpoint in modo che risponda alle aziende e alle tecnologie che le appartengono. Quindi posso effettuare una singola chiamata API per ottenere tutti i dati necessari per il rendering della pagina:

[
  {
    company_name: '',
    technologies: [
      {
        tech_name: '',
        tech_icon_name: ''
      },
      {
        ...
      },
      ...
    ]
  },
  {
    ...
  }
]

Questa è una buona pratica e quali sono le alternative?

    
posta Sung Won Cho 07.08.2016 - 06:55
fonte

1 risposta

4

Non c'è assolutamente niente di sbagliato nel restituire array annidati nella risposta JSON da un'API REST, tuttavia, c'è una domanda se vuoi farlo.

Se stai creando l'API REST per un cliente, ci sono buone probabilità che tu voglia restituire le tecnologie insieme alle aziende, perché probabilmente il tuo cliente ti ha chiesto di farlo. Forse richiedono i dati e non vogliono interrogare la tua API REST più volte. In tal caso è del tutto ragionevole restituire le tecnologie insieme alle aziende.

D'altro canto, quando si crea un'API REST che può essere utilizzata da chiunque di solito si desidera eseguire un'analisi statistica sui dati che si intendono fornire e progettare di conseguenza gli endpoint.

Dopo la tua analisi, potresti scoprire quanto segue: La tua API viene chiamata dai tuoi clienti 500 000 volte al giorno. Ogni richiesta richiede in media 230 ms per essere completata, ovvero 31,94 ore di tempo del server. Hai parlato con i tuoi clienti e di mezzo milione di richieste solo 30 000 richieste fanno uso delle tecnologie delle aziende.

Dato che si stanno restituendo allo stesso tempo (aziende e tecnologie), le altre 470.000 richieste sono più lente e caricano più pesantemente sul server di quanto potrebbero idealmente fare. La query restituisce dati di cui i consumatori non hanno bisogno e i dati devono essere in qualche modo elaborati e inviati comunque ai consumatori.

Dopo aver riflettuto, è possibile farlo in modo che le tecnologie vengano recuperate su richiesta e non automaticamente per tutte le aziende e i 30.000 consumatori che richiedono effettivamente che le tecnologie interrogheranno la tua API una seconda volta.

Grazie all'ottimizzazione, puoi ora interrogare le aziende senza le tecnologie in media in 195 ms e il tempo medio di richiesta delle tecnologie per un'azienda separatamente è 170 ms . Devi ancora chiamare l'endpoint delle aziende mezzo milione di volte, il che richiederà ora 27,083 ore di tempo del server e quindi elaborare ulteriori 30 000 richieste per i consumatori che fanno uso di tecnologie, prendendo 1.416 ora del tempo del server, in totale 28,5 ore del tempo del server.

Separando le query, il tuo sistema non solo può gestire meglio il carico riducendo il carico da 31,94 ore del tempo del server a 28,5 ore , ma anche i tuoi clienti più felice, perché ottengono le informazioni più velocemente.

    
risposta data 07.08.2016 - 12:31
fonte

Leggi altre domande sui tag