Estoy tratando de usar gqlgen (https://github.com/99designs/gqlgen) con gin.
Estoy usando el siguiente código pero tengo dudas.
package server
import (
"myProject/graphql"
"github.com/99designs/gqlgen/handler"
"github.com/gin-gonic/gin"
)
func Start() {
r := gin.Default()
r.GET("/query", gin.WrapH(handler.Playground("GraphQL playground", "/api")))
r.GET("/api", gin.WrapH(handler.GraphQL(graphql.NewExecutableSchema(graphql.Config{Resolvers: &graphql.Resolver{}}))))
r.POST("/api", gin.WrapH(handler.GraphQL(graphql.NewExecutableSchema(graphql.Config{Resolvers: &graphql.Resolver{}}))))
r.Run()
}
Como puede ver, necesito repetir las líneas:
r.GET("/api", gin.WrapH(handler.GraphQL(graphql.NewExecutableSchema(graphql.Config{Resolvers: &graphql.Resolver{}}))))
r.POST("/api", gin.WrapH(handler.GraphQL(graphql.NewExecutableSchema(graphql.Config{Resolvers: &graphql.Resolver{}}))))
¿Es esto correcto?
¿Puedo tener GET
y POST
ambos con la misma función de controlador?
(Abrí https://github.com/99designs/gqlgen/issues/418 para este problema).
Gin usa httprouter
enrutador y de acuerdo con el código fuente de ESTA CADENA es imposible.
por cierto
Ni siquiera puedo imaginar qué vas a hacer con GET
y POST
en la misma acción
¿Por qué no solo
graphHandler := gin.WrapH(handler.GraphQL(graphql.NewExecutableSchema(graphql.Config{Resolvers: &graphql.Resolver{}})))
r.GET("/api", graphHandler)
r.POST("/api", graphHandler)
sí, esto todavía repite la línea, pero facilita la modificación.
Tengo que estar de acuerdo con @olegsobchuk , en una WebAPI normal, GET y POST harían cosas diferentes y, por lo tanto, tienen diferentes controladores, pero la gente hace lo que hace.
router.GET("/a/b", h)
router.POST("/a/b", h)
¡está bien!
Comentario más útil
¿Por qué no solo
sí, esto todavía repite la línea, pero facilita la modificación.
Tengo que estar de acuerdo con @olegsobchuk , en una WebAPI normal, GET y POST harían cosas diferentes y, por lo tanto, tienen diferentes controladores, pero la gente hace lo que hace.