Come specificare molti ID e il loro nome di variabile in una richiesta API REST?

5

Qual è il modo più comune e saggio per specificare gli ID di molte entità in una richiesta API?

Per una richiesta di entità singola ho:

GET /v1/entities/{entity_id}

I miei suggerimenti per richiedere molte entità:

GET /v1/entities?entity_ids={entity_id1},{entity_id2}

Con lo stesso nome variabile entity_id:

GET /v1/entities?entity_id={entity_id1},{entity_id2}

Più sembra l'endpoint singolare:

GET /v1/entities/{entity_id1},{entity_id2}

O esiste un altro modo per progettare questi endpoint?

    
posta Yann 27.06.2017 - 12:52
fonte

2 risposte

10

Temo che la cosa standard da fare non sia la ricerca di più ID come questo usando REST. Se stai caricando diverse entità specifiche per id, dovresti chiederti perché lo stai facendo. Forse queste entità sono ordini dei clienti appartenenti a un cliente specifico e stai caricando i dettagli di ciascun ordine. In tal caso, dovresti avere un URL più simile a /customer/{id}/orders che restituisce tutti gli ordini appartenenti a un cliente con id {id} piuttosto che conoscere preventivamente gli id e caricarli singolarmente.

In caso contrario, se l'utente sta tentando di caricare più entità da un elenco per visualizzarne i dettagli, semplificare la visualizzazione per mostrare un dettaglio dell'entità alla volta e caricarne uno mentre l'utente si sposta in avanti o all'indietro. In altre parole, non dovresti trovarti in una situazione in cui avresti avuto bisogno in particolare di più entità caricate dai loro ID senza un collegamento evidente tra loro che avresti bisogno di un modo per chiamare il servizio REST con ogni singolo ID elencato.

    
risposta data 27.06.2017 - 14:03
fonte
0

Tutti questi approcci condividono lo stesso problema: gonfiano la stringa di richiesta quando vengono interrogati molti ID. Quando ci sono casi in cui vengono richiesti molti ID, è probabile che tu possa entrare nella situazione in cui un server gateway rifiuta la richiesta perché la stringa di query supera un limite (di solito intorno ai ~ 2000 caratteri).

Con questo in mente nessuna di queste opzioni è più saggia dell'altra.

Ho visto l'ultimo approccio in diverse API mentre non ho visto nessuno degli altri. Ti consiglio di andare con

/entities/id1,id2

Nota a margine: non eseguire il controllo delle versioni API tramite l'URL se si desidera essere RESTful. Entity # 5 è ancora Entity # 5, indipendentemente dalla versione dell'API con cui si accede. Il consenso è usare l'intestazione per il controllo delle versioni:

X-API-Version: 1
    
risposta data 27.06.2017 - 13:15
fonte

Leggi altre domande sui tag