Ho un repository NoSQL con due tabelle, Foo e Bar. Ogni Foo ha alcuni metadati e un elenco di ID della barra. Ogni barra ha alcuni metadati.
Sto scrivendo l'API per il recupero di un Foo e vorrei fornire la possibilità di specificare se il Foo restituito contiene o gli ID Bar relativi o gli oggetti Bar correlati.
Ad esempio, uno potrebbe ottenere /foo/foo-id-1?resolve=false
e ricevere la risposta
{
"id": "foo-id-1",
"metadata": {...},
"bars": ["bar-id-1", "bar-id-2", ...]
}
Verso GET /foo/foo-id-1?resolve=true
e ricezione
{
"id": "foo-id-1",
"metadata": {...},
"bars": [
{
"bar-id-1",
"metadata": {}
},
{
"bar-id-2",
"metadata": {}
}, ...
]
}
Mi piacerebbe farlo perché
- Nel caso in cui il client abbia bisogno solo dei metadati Foo e non dei metadati della Barra, posso salvare una chiamata al repository per recuperare i metadati della Barra.
- Nel caso in cui il client abbia bisogno dei metadati della Barra inclusi in Foo, posso salvare il client effettuando una chiamata risolvendo gli ID Bar agli oggetti.
Le mie domande sono
- Quale dovrebbe essere il nome del parametro che fornisce questa capacità? L'ho chiamato "risoluzione" ma c'è qualcosa di meglio (forse "proiezione") o uno standard?
- Il parametro deve essere una bandiera, come ho suggerito nell'esempio sopra, o una stringa nel caso in cui vengano aggiunti più bambini Foo? Ad esempio,
/foo/foo-id-1?resolve=bars,bazs
. - Va bene avere un endpoint (GET su
/foo:id
) che restituisce due diversi schemi di dati? Cioè, nel primo caso lo schema dei dati contienebars :: [String]
e nel secondobars :: [Bar]