Go(Golang)를 사용하여 GraphQL API 서버 생성 방법
나는 어떻게 개발하는지GraphQL API using Apollo Server에 관한 예시를 썼다.Apollo 및 NodeJS 사용은 간단합니다.그러나, 나는 Go(Golang) 을 내가 진행하고 있는 새로운 프로젝트에 사용하고 싶다.처음에 나는 바둑에서 망설였다. 왜냐하면 그것은 보기에 쉽지 않기 때문이다.참고 자료와 끈기를 읽은 후에 나는 graphql-go를 어떻게 사용하여 GraphQL을 만드는지에 대한 예시, 즉 Go/Golang의 GraphQL의 n 실현을 생각해냈다.
Go를 사용하여 GraphQL API를 구축할 때 몇 가지 재미있는 프레임워크부터 시작할 수 있습니다.다음은 GraphQL's website 중 일부입니다.
graphql-go: Go/Golang의 GraphQL 구현
graph-gophers/graphql-go: Golang에서 GraphQL(washttps://github.com/neelance/graphql-go을 적극적으로 실현합니다.
GQLGen - 생성된graphql 서버 라이브러리로 이동합니다.
graphql-relay-go: react 중계를 지원하는graphql Go 서버를 구축하는 데 도움을 주는 Go/Golang 라이브러리입니다.
machinebox/graphql: GraphQL용 우아한 저급 HTTP 클라이언트입니다.
samsarahq/thunder: 간단한 모델 구축, 실시간 조회와 일괄 처리를 가진GraphQL 구현.
도비토 / gographql 서버 예시
go GraphQL을 사용하는 GraphQL 서버의 예입니다.이 예제에서는 Go v1.12를 사용하여 테스트했습니다.이것은 내 블로그 글의 원본 코드이다 -
gographql 서버 예시
Go GraphQL을 사용하여 GraphQL 서버 예제를 만들었습니다.나는 그것이 Go를 사용하여 GraphQL을 배우고 있는 사람들에게 유용하길 바란다.이 예제에서는 Go v1.12를 사용하여 테스트했습니다.이것은 내 블로그 글http://www.melvinvivas.com/develop-graphql-web-apis-using-golang의 원본 코드이다
실행 예
cd cd src/cmd/server/
go run main.go
예제 실행 후 GraphiQL 액세스
http://localhost:3000/graphiql
더 많은 과학 기술 기사, 나의 블로그를 방문하십시오http://www.melvinvivas.com
관련 블로그 게시물http://www.melvinvivas.com/develop-graphql-web-apis-using-golang/
블로그 게시물
나는 어떻게 개발하는지GraphQL API using Apollo Server에 관한 예시를 썼다.Apollo 및 NodeJS 사용은 간단합니다.그러나, 나는 Go(Golang) 을 내가 진행하고 있는 새로운 프로젝트에 사용하고 싶다.처음에 나는 바둑에서 망설였다. 왜냐하면 그것은 보기에 쉽지 않기 때문이다.참고 자료와 끈기를 읽은 후에 나는 마침내 graphql-go를 어떻게 사용하여 GraphQL을 만드는지에 대한 예시를 생각해냈다. n은 GraphQL for...
View on GitHub
다음은 우리의 주요 기능이다.세 번째 줄에서 GraphiQL 프로세서를 만들었습니다.이것은 우리api 서버에 GraphiQL을 사용할 수 있기 때문에 단독으로 실행할 필요가 없습니다.GraphiQL는 GraphQL API 탐색을 위한 브라우저 내부 도구입니다.잠시 후 코드를 완성하면 GraphiQL의 모습을 볼 수 있습니다.
우리는 서버가 http를 사용하여 요청을 받기를 원하기 때문에, 우리는 10줄에 서버를 만들었고, 표준 http 패키지를 사용하여 포트 3000에서 실행했습니다.GraphQL 조회를 처리해야 하기 때문에 gqlHandler 프로세서를 만들었습니다.
func main() {
graphiqlHandler, err := graphiql.NewGraphiqlHandler("/graphql")
if err != nil {
panic(err)
}
http.Handle("/graphql", gqlHandler())
http.Handle("/graphiql", graphiqlHandler)
http.ListenAndServe(":3000", nil)
}
다음은 우리가 프로그램을 처리하는 코드입니다.이 함수에서, 우리는 요청을 받고 그것을 json으로 디코딩합니다.json을 확인하는 동안 오류가 발생하면 HTTP 오류 400으로 돌아갑니다.
그런 다음 함수 processQuery () 를 호출하여 질의를 전달합니다.
func gqlHandler() http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Body == nil {
http.Error(w, "No query data", 400)
return
}
var rBody reqBody
err := json.NewDecoder(r.Body).Decode(&rBody)
if err != nil {
http.Error(w, "Error parsing JSON request body", 400)
}
fmt.Fprintf(w, "%s", processQuery(rBody.Query))
})
}
다음은 Process Query () 함수의 모습입니다.현재, 우리는 데이터 From JSON () 함수를 사용하여 json 파일에서 데이터를 검색하지만, 이상적인 상황에서 이것은 조회 데이터베이스일 것이다.우리가 사용할 데이터를 얻은 후, 우리는 gqlSchema (jobsData) 를 호출합니다. 이것은 우리의 데이터에 따라 GraphQL 모드를 만듭니다.jobsData는 작업 구조의 일부분으로 json 파일에서 나온 데이터를 포함합니다.
func processQuery(query string) (result string) {
retrieveJobs := retrieveJobsFromFile()
params := graphql.Params{Schema: gqlSchema(retrieveJobs), RequestString: query}
r := graphql.Do(params)
if len(r.Errors) > 0 {
fmt.Printf("failed to execute graphql operation, errors: %+v", r.Errors)
}
rJSON, _ := json.Marshal(r)
return fmt.Sprintf("%s", rJSON)
}
GraphQL 마술은 gqlSchema(jobsData) 함수에서 발생합니다.이 예에서, 우리는 2개의 조회를 지원합니다./jobs와jobs/{id}
/jobs- 모든 작업으로 돌아가기(세 번째 줄)
/jobs/{id} - 단일 매개 변수 id를 지원하고 id에 따라 선별된 단일 작업 (10 줄) 을 되돌려줍니다.
두 함수의 분해기는 여섯 번째 줄과 18번째 줄에 있다.분석 프로그램은 조회 데이터를 되돌려 주는 것을 책임진다.
func gqlSchema(queryJobs func() []Job) graphql.Schema {
fields := graphql.Fields{
"jobs": &graphql.Field{
Type: graphql.NewList(jobType),
Description: "All Jobs",
Resolve: func(params graphql.ResolveParams) (interface{}, error) {
return queryJobs(), nil
},
},
"job": &graphql.Field{
Type: jobType,
Description: "Get Jobs by ID",
Args: graphql.FieldConfigArgument{
"id": &graphql.ArgumentConfig{
Type: graphql.Int,
},
},
Resolve: func(params graphql.ResolveParams) (interface{}, error) {
id, success := params.Args["id"].(int)
if success {
for _, job := range queryJobs() {
if int(job.ID) == id {
return job, nil
}
}
}
return nil, nil
},
},
}
rootQuery := graphql.ObjectConfig{Name: "RootQuery", Fields: fields}
schemaConfig := graphql.SchemaConfig{Query: graphql.NewObject(rootQuery)}
schema, err := graphql.NewSchema(schemaConfig)
if err != nil {
fmt.Printf("failed to create new schema, error: %v", err)
}
return schema
}
GraphQL API 서버 실행
git clone https://github.com/donvito/go-graphql-server-example.git
cd go-graphql-server-example/src/cmd/server/
go run main.go
서버 실행 후 GraphiQL 액세스
http://localhost:3000/graphiql
그렇습니다!Go를 사용하여 GraphQL API를 만들었습니다.
온전한 원본 코드는 나의githubrepo에서 찾을 수 있습니다.
https://github.com/donvito/go-graphql-server-example
공구서류
https://github.com/graphql-go/graphql
https://github.com/friendsofgo/graphiql
https://graphql.org/code/#go
건배!Go와 GraphQL을 처음 사용하신 분들께 도움이 됐으면 좋겠습니다!
내 새 블로그 게시물을 더 업데이트하면 트위터에서 나를 팔로우할 수 있다.나는 아직도 나의 GitHub 에서 코드를 공유한다.만약 당신이 내가 무엇을 하는지 더 알고 싶다면, 나를 가입시켜 주세요.나 최근에 새로운 거 시작했어.이리 와봐!
나도 과학 기술 블로그의 일을 찾고 있다.예제 블로그 게시물을 보려면 my blog 을 참조하십시오.단서가 있었으면 좋겠어요.:)
Reference
이 문제에 관하여(Go(Golang)를 사용하여 GraphQL API 서버 생성 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/donvito/how-to-create-a-graphql-api-server-using-go-golang-2j9e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
cd cd src/cmd/server/
go run main.go
func main() {
graphiqlHandler, err := graphiql.NewGraphiqlHandler("/graphql")
if err != nil {
panic(err)
}
http.Handle("/graphql", gqlHandler())
http.Handle("/graphiql", graphiqlHandler)
http.ListenAndServe(":3000", nil)
}
func gqlHandler() http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Body == nil {
http.Error(w, "No query data", 400)
return
}
var rBody reqBody
err := json.NewDecoder(r.Body).Decode(&rBody)
if err != nil {
http.Error(w, "Error parsing JSON request body", 400)
}
fmt.Fprintf(w, "%s", processQuery(rBody.Query))
})
}
func processQuery(query string) (result string) {
retrieveJobs := retrieveJobsFromFile()
params := graphql.Params{Schema: gqlSchema(retrieveJobs), RequestString: query}
r := graphql.Do(params)
if len(r.Errors) > 0 {
fmt.Printf("failed to execute graphql operation, errors: %+v", r.Errors)
}
rJSON, _ := json.Marshal(r)
return fmt.Sprintf("%s", rJSON)
}
func gqlSchema(queryJobs func() []Job) graphql.Schema {
fields := graphql.Fields{
"jobs": &graphql.Field{
Type: graphql.NewList(jobType),
Description: "All Jobs",
Resolve: func(params graphql.ResolveParams) (interface{}, error) {
return queryJobs(), nil
},
},
"job": &graphql.Field{
Type: jobType,
Description: "Get Jobs by ID",
Args: graphql.FieldConfigArgument{
"id": &graphql.ArgumentConfig{
Type: graphql.Int,
},
},
Resolve: func(params graphql.ResolveParams) (interface{}, error) {
id, success := params.Args["id"].(int)
if success {
for _, job := range queryJobs() {
if int(job.ID) == id {
return job, nil
}
}
}
return nil, nil
},
},
}
rootQuery := graphql.ObjectConfig{Name: "RootQuery", Fields: fields}
schemaConfig := graphql.SchemaConfig{Query: graphql.NewObject(rootQuery)}
schema, err := graphql.NewSchema(schemaConfig)
if err != nil {
fmt.Printf("failed to create new schema, error: %v", err)
}
return schema
}
git clone https://github.com/donvito/go-graphql-server-example.git
cd go-graphql-server-example/src/cmd/server/
go run main.go
Reference
이 문제에 관하여(Go(Golang)를 사용하여 GraphQL API 서버 생성 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/donvito/how-to-create-a-graphql-api-server-using-go-golang-2j9e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)