Devo creare un servizio che esponga un'API (REST). Utilizzerà MongoDB come database e structs
come modello di dati. Il problema è che non riesco davvero a trovare una buona soluzione per rendere il CRUD di base non ripetibile. Ad esempio:
Ho 3 struct (ModelA, ModelB, ModelC) Ciascuno funge da modello per un documento db. Devo esporre un'API in cui l'utente può aggiungere, modificare, elencare ed eliminare documenti. Anche con paginazione e filtraggio. Ho creato un gestore per ogni URL API. Diciamo che gli URL per la gestione di ogni modello sono:
- / model_a / {: id}
- / model_b / {: id}
- / model_c / {: id}
Se chiamo GET /model_a/
, dovrebbe elencare tutti i documenti ModelA
. Inoltre posso passare alcuni argomenti per filtrare la lista. Se chiamo GET /model_b/
, dovrebbe fare lo stesso, ma per ModelB
documenti. Il codice per due gestori è fondamentalmente lo stesso. E voglio semplificarlo un po '.
Stavo cercando di creare alcuni metodi generici con interface{}
come argomento a cui posso passare una variabile di tipo di modello. Ecco un esempio semplificato:
func (r *Routes) GetHandler () {
var model models.modela
r.GetList(&model)
}
func (r *Routes) GetList (m interface{}) {
...
}
Ma genera molti problemi e sento davvero che questo non è l'approccio corretto. Anche in questo modo ho perso i vantaggi del tipo struct su cui JSON deve essere eseguito il marshalling.
Ho dedicato molto tempo alla ricerca e non riesco a trovare alcun buon esempio su come scrivere un'API con più strutture. Tutto quello che ho trovato (anche nei libri) è come creare handler, listener http e cose del genere. Ma questo è quello che so. Ho bisogno di imparare come progettare qualcosa di più grande della semplice API.
Se qualcuno sa dove posso trovare tale conoscenza o qualsiasi cosa che possa aiutarmi a capire un approccio un po 'più corretto nel progettare una buona API in Go, apprezzerei proprio questo.