RESTful uno o molti

1

Quale è un buon modo per progettare un pattern URL RESTful per ottenere uno e più risultati per ID?

Uno (Risposta: singolo elemento )

/invoices?id=a/b

Molti (Risposta: array di elementi )

/invoices?id=a/b&id=bar

L'approccio sopra sembra bello in teoria, ma solleva un paio di dubbi

  • Cosa deve essere restituito (JSON) se si omette id , {} , o []
  • Che cosa otterrà un cliente con un elenco di ID di dimensione uno, un array o un singolo elemento
posta Johan Sjöberg 18.12.2017 - 09:34
fonte

3 risposte

3

Tradizionalmente useresti:

  • / fatture - ottieni un elenco di tutte le fatture e

  • / fatture / 1234 - ottieni la fattura con l'ID 1234

Quindi, per rispondere alla tua prima domanda, "Che cosa succede se l'id è omesso?", si finirebbe con la richiesta di tutte le fatture.

Se avevi bisogno di più fatture, dovresti richiederle una alla volta dal server o richiederle tutte e filtrarle da sole. Non c'è davvero un modo RESTful di recuperare diverse fatture specifiche, né dovrebbe esserlo a mio modesto parere. Più che probabile hai a che fare con tutte le fatture o hai a che fare con una fattura specifica. Se il tuo programma non è strutturato in questo modo, considera di farlo in quanto cade bene con l'approccio RESTful.

Se vuoi dire, mostra un elenco parziale di fatture, quindi considera qualcosa come:

/ fatture / page / 5

    
risposta data 18.12.2017 - 10:05
fonte
1

What's a good way to design a RESTful URL pattern to get one and many results by ID ?

Ricorda che a REST non interessa quale ortografia usi per i tuoi identificatori.

Qualcosa come

# Single item
/67a6e008-7d99-41ae-b680-3a2c8b3375ad

# Multiple items
/b484b03e-7726-434d-bb25-1a5da0a7315a

è fine .

What (JSON) should be returned if id is omitted

Dovresti restituire la rappresentazione della risorsa identificata.

/invoices e /invoices?id=a/b sono risorse diverse ; per esempio, vengono messi in cache separatamente.

What will a client with a List of IDs of size one get back, an array or a single item

Il cliente recupera la rappresentazione della risorsa richiesta. Non c'è nulla nell'ortografia dell'identificatore che specifica quale sarà la rappresentazione; questo è ciò che Content-Type è per. Nel caso di application / json , sarà un JSON-text di un certo sapore, ma ciò non distingue tra object e array .

    
risposta data 18.12.2017 - 15:37
fonte
0

Un modo per richiedere più elementi è creare una risorsa raccolta personalizzata, quindi richiedere (tramite un collegamento nella risposta) una versione completa della collezione.

per es.

POST /invoice-collections
{
    "items" = [
        "/invoices/1",
        "/invoices/5",
        "/invoices/8",
        "/invoices/9"
    ]
}


201 Created
Location: /invoice-collections/99
Link: </invoice-collections/99?depth=full>;rel=http://johan.example/relations#full-depth

{
     "items" = [
        "/invoices/1",
        "/invoices/5",
        "/invoices/8",
        "/invoices/9"
     ]
}

Quindi cerca la relazione di collegamento http://johan.example/relations#full-depth nella risposta e segui quella.

    
risposta data 18.12.2017 - 15:42
fonte

Leggi altre domande sui tag