Golang Graphql

Hi gengz, di artikel kali ini saya akan coba bahas untuk membuat graphql dengan golang, Lets Go!

Mari kita buat dulu yang folder kosong, lalu masuk ke dalam foldernya

mkdir testgraphql
cd testgraphql

Saya akan menggunakan library berikut :

https://github.com/99designs/gqlgen

Selanjutnya yang akan kita lakukan adalah melakukan init terhadap folder

go mod init testgraphql

Yuk install dulu librarynya

go get github.com/99designs/gqlgen

Nah, kita init dulu yuk gqlgennya

go run github.com/99designs/gqlgen init

Setelah init, kita bisa melihat bahwa saat ini di dalam folder testgraphql sudah ada structurenya

Bisa kita lihat juga bahwa schema sudah dibuatkan oleh gqlgen

Yuk kita rubah dulu resolver nya, supaya ada action yang kita lakukan di CreateTodo dan Todos, bisa di check di file schema.resolvers.go

package graph

// This file will be automatically regenerated based on the schema, any resolver implementations
// will be copied through when generating and any unknown code will be moved to the end.

import (
	"context"
	"fmt"
	"math/rand"
	"testgraphql/graph/generated"
	"testgraphql/graph/model"
)

func (r *mutationResolver) CreateTodo(ctx context.Context, input model.NewTodo) (*model.Todo, error) {
	todo := &model.Todo{
		Text: input.Text,
		ID:   fmt.Sprintf("T%d", rand.Int()),
		User: &model.User{ID: input.UserID, Name: "user " + input.UserID},
	}
	r.todos = append(r.todos, todo)
	return todo, nil
}

func (r *queryResolver) Todos(ctx context.Context) ([]*model.Todo, error) {
	return r.todos, nil
}

// Mutation returns generated.MutationResolver implementation.
func (r *Resolver) Mutation() generated.MutationResolver { return &mutationResolver{r} }

// Query returns generated.QueryResolver implementation.
func (r *Resolver) Query() generated.QueryResolver { return &queryResolver{r} }

type mutationResolver struct{ *Resolver }
type queryResolver struct{ *Resolver }

Lalu kita juga butuh update resolver.go

package graph

import "testgraphql/graph/model"

// This file will not be regenerated automatically.
//
// It serves as dependency injection for your app, add any dependencies you require here.

type Resolver struct{ todos []*model.Todo }

Yuk coba jalanin

Wah ada error nih, kenapa ya kira kira ? :), bisa kita lihat bahwa ada library yang belum kita install, yuk kita solve dulu

Yuk kita ulang lagi

Mangstap mamangz, server kita sudah jalan, coba liat di browser yuk, silahkan akses http://localhost:8080

Wow, sudah jalan ni gengz, kita coba query dibawah ini yuk

mutation createTodo {
  createTodo(input:{text:"todo", userId:"1"}) {
    user {
      id
    }
    text
    done
  }
}

query findTodos {
    todos {
      text
      done
      user {
        name
      }
    }
}

Wow, kereeeen, sudah jalan ya, kita bisa coba juga di Postman, jangan lupa memakai “Post” dan query diatas tidak bisa disatukan di Postman, kita harus pisah, bisa kita mulai dengan Create dulu

mutation createTodo {
  createTodo(input:{text:"todo", userId:"1"}) {
    user {
      id
    }
    text
    done
  }
}

Create sudah berhasil, yuk kita coba Read

Congratulation, kita sudah berhasil nyoba nyoba graphql di Golang :)), untuk bacaan lebih lanjut, silahkan akses situsnya gqlgen dibawah ini ya

https://gqlgen.com

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s

Situs yang Didukung WordPress.com.

Atas ↑

%d blogger menyukai ini: