目标:
使用github.com/neelance/graphql-go starwars示例,我试图向我的ReactJS客户端写一个JSON响应。这个结构对我来说是全新的,Golang以及btw。
问题:
为了获得对以下示例GraphQL查询的适当响应,data
变量应该是什么?
query clientQuery {
character(id: 1000) {
name
appearsIn
}
}
其他信息:
从我在这里和那里读到的内容,data
必须是某种结构。我在示例中提供了大量结构(请参阅下面的starwars.go)。
要修改的代码(main.go):
package main
import (
"encoding/json"
"log"
"net/http"
"github.com/neelance/graphql-go"
"github.com/neelance/graphql-go/example/starwars"
"github.com/neelance/graphql-go/relay"
)
var schema *graphql.Schema
func init() {
schema = graphql.MustParseSchema(starwars.Schema, &starwars.Resolver{})
}
func main() {
port := ":8080"
log.Printf(`GraphQL server starting up on http://localhost%v`, port)
http.Handle("/query", &relay.Handler{Schema: schema})
http.HandleFunc("/graphql", func(w http.ResponseWriter, r *http.Request) {
// THIS IS SUPER WRONG, data should be something
// like data := starwars.Resolver{} or so?
data := `{"data":{"character":{"name":"Luke Skywalker","appearsIn":["NEWHOPE","EMPIRE","JEDI"]}}}`
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusCreated)
json.NewEncoder(w).Encode(data)
})
log.Fatal(http.ListenAndServe(port, nil))
}
参考1 - starwars.go
参考2 - relay.go
答案 0 :(得分:0)
你的问题有点令人困惑。 您询问的是JSON,但您想要的响应不是有效的JSON格式: 看起来您添加了无关的GraphQL信息。
我不确定这是关于GraphQL还是JSON的问题。无论如何我会尽力回答。
您的示例data
看起来像这样,因此我假设这是您要生成的结果:
data := `{"data":{"character":{"name":"Luke Skywalker","appearsIn":["NEWHOPE","EMPIRE","JEDI"]}}}`
使Go生成适当的JSON的一种简洁方法是创建包含数据的Structs:
type Response struct {
Data Data `json:"data"`
}
type Data struct {
Character Character `json:"characer"`
}
type Character struct {
Name string `json:"name"`
AppearsIn []string `json:"appearsIn"`
}
然后你可以像这样定义数据:
data := Response{
Data: Data{
Character: Character{
Name: "Luke Skywalker",
AppearsIn: []string{"NEWHOPE", "EMPIRE", "JEDI"},
},
},
}
也许这个问题不是关于JSON而是关于GraphQL。在这种情况下,您需要澄清您的问题。
<强>参考强>
json:".."
):https://golang.org/pkg/encoding/json/#Marshal