DynQL is has one enpoint for query and tranform the Entities.
Example POST -> 127.0.0.1:9090/dql
Input:
{
"query1": {
"method": "demo",
"input": {
"name": "Pedro Martinez",
"age": 59,
"position": {
"name": "manager"
}
},
"output": {
"first_name": "$.name",
"age": "$.age",
"level": "$.position.name"
}
},
"query2": {
"method": "demo",
"input": {
"name": "Marcela Perez",
"age": 31
}
}
}
Output
{
"query1": {
"age": 59,
"first_name": "Pedro Martinez",
"level": "manager"
},
"query2": {
"age": 31,
"name": "Marcela Perez",
"position": {
"name": ""
}
}
}
package main
import (
"github.com/gopher1980/dynql"
"github.com/gorilla/mux"
"log"
"net/http"
)
type Position struct {
Name string `json:"name"`
}
type Persona struct {
Name string `json:"name"`
Age int `json:"age"`
Position Position `json:"position"`
}
func demo(name string, ptr interface{}, r *http.Request,payload interface{}, parent interface{}) interface{} {
p := ptr.(*Persona)
return p
}
func main() {
dql := dynql.NewDQL()
dql.Put("demo", demo, Persona{})
r := mux.NewRouter()
r.HandleFunc("/dql", dql.Run).Methods(http.MethodPost)
http.Handle("/", r)
log.Fatal(http.ListenAndServe(":9090", nil))
}
Example without strictic struct:
package main
import (
"github.com/gopher1980/dynql"
"github.com/gorilla/mux"
"log"
"net/http"
)
func demo(name string, ptr interface{}, r *http.Request,payload interface{}, parent interface{}) interface{} {
return ptr
}
func main() {
dql := dynql.NewDQL()
dql.Put("demo", demo, make(map[string]interface{}))
r := mux.NewRouter()
r.HandleFunc("/dql", dql.Run).Methods(http.MethodPost)
http.Handle("/", r)
log.Fatal(http.ListenAndServe(":9090", nil))
}