Gin: OBTENER y PUBLICAR juntos, el mismo controlador.

Creado en 8 nov. 2018  ·  3Comentarios  ·  Fuente: gin-gonic/gin

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).

Comentario más útil

¿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.

Todos 3 comentarios

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!

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

ghost picture ghost  ·  3Comentarios

atifzia picture atifzia  ·  3Comentarios

sofish picture sofish  ·  3Comentarios

wangcn picture wangcn  ·  3Comentarios

gplume picture gplume  ·  3Comentarios