Gin: GET et POST ensemble, le même gestionnaire.

Créé le 8 nov. 2018  ·  3Commentaires  ·  Source: gin-gonic/gin

J'essaie d'utiliser gqlgen (https://github.com/99designs/gqlgen) avec gin.

J'utilise le code ci-dessous mais j'ai des doutes.

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()
}

Comme vous pouvez le voir, je dois répéter les lignes:

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{}}))))

Est-ce correct?

Puis-je simplement avoir GET et POST tous les deux avec la même fonction de gestionnaire ?

(J'ai ouvert https://github.com/99designs/gqlgen/issues/418 pour ce problème).

Commentaire le plus utile

Pourquoi ne viens-tu pas

graphHandler := gin.WrapH(handler.GraphQL(graphql.NewExecutableSchema(graphql.Config{Resolvers: &graphql.Resolver{}})))
r.GET("/api", graphHandler)
r.POST("/api", graphHandler)

oui, cela répète toujours la ligne, mais facilite sa modification.

Je suis d'accord avec @olegsobchuk , dans une WebAPI normale, GET et POST feraient des choses différentes et auraient donc des gestionnaires différents - mais les gens font ce qu'ils font

Tous les 3 commentaires

Gin utilise httprouter routeur CETTE CHAINE, c'est impossible.

d'ailleurs
Je ne peux même pas imaginer ce que tu vas faire avec GET et POST sur la même action

Pourquoi ne viens-tu pas

graphHandler := gin.WrapH(handler.GraphQL(graphql.NewExecutableSchema(graphql.Config{Resolvers: &graphql.Resolver{}})))
r.GET("/api", graphHandler)
r.POST("/api", graphHandler)

oui, cela répète toujours la ligne, mais facilite sa modification.

Je suis d'accord avec @olegsobchuk , dans une WebAPI normale, GET et POST feraient des choses différentes et auraient donc des gestionnaires différents - mais les gens font ce qu'ils font

    router.GET("/a/b", h)
    router.POST("/a/b", h)

c'est bon!

Cette page vous a été utile?
0 / 5 - 0 notes