Skip to content
Santekno.com | Level Up Your Engineering Skills
ID
📖 0%
20 Sep 2025 · 5 mnt baca ·Artikel 82 / 125
Go

82 Menyambungkan React App dengan graphql-go Backend

IH
Ihsan Arif
Penulis di Santekno · Backend Engineer

82 Menyambungkan React App dengan graphql-go Backend
Implementasi Praktis API GraphQL di Era Modern Frontend


Di era aplikasi web modern, komunikasi antara frontend dan backend menjadi salah satu aspek kritis yang menentukan keberhasilan integrasi teknologi. React, sebagai salah satu framework frontend paling populer, sering kali dipasangkan dengan berbagai backend, termasuk REST maupun GraphQL. Dalam artikel ini, saya akan membahas secara praktis bagaimana cara menyambungkan React App dengan backend GraphQL yang dibuat menggunakan graphql-go , library GraphQL untuk bahasa Go.


Mengapa GraphQL?

Sebelum masuk ke implementasi, mari ulas sejenak: mengapa GraphQL? Jika Anda sudah nyaman dengan REST API, GraphQL menawarkan beberapa keuntungan penting:

  • Single Endpoint
    Tidak perlu membuat banyak endpoint, satu endpoint cukup untuk semua kebutuhan query/mutation.

  • Flexible Query
    Client memutuskan data apa saja yang ingin diambil, tanpa dibatasi bentuk response dari API.

  • Efisien
    Mengurangi over-fetching dan under-fetching data.

Dengan kombinasi React dan GraphQL, developer frontend bisa lebih produktif, sekaligus meminimalisir beban data di jaringan.


Arsitektur Sederhana

Sebelum coding, mari visualisasikan arsitektur sederhana kita. Berikut diagram alur komunikasi antara React App dan graphql-go backend:

MERMAID
graph TD
    A[User] --> B[React App]
    B -- Query/Mutation --> C[GraphQL Endpoint (Go Server)]
    C -- data response --> B

1. Membuat Backend GraphQL dengan Go

Instalasi

Siapkan project Go, install package yang dibutuhkan:

shell
1go get github.com/graphql-go/graphql
2go get github.com/graphql-go/handler

Skema GraphQL Sederhana

Bayangkan kita membuat aplikasi Todo List sederhana. Beginilah tipe data dan resolver GraphQL-nya.

go
 1package main
 2
 3import (
 4    "encoding/json"
 5    "net/http"
 6    "github.com/graphql-go/graphql"
 7    "github.com/graphql-go/handler"
 8)
 9
10// Simpanan Dummy data
11var todos = []map[string]interface{}{
12    {"id": "1", "content": "Belajar GraphQL", "completed": false},
13}
14
15func main() {
16    // Define Todo Type
17    todoType := graphql.NewObject(graphql.ObjectConfig{
18        Name: "Todo",
19        Fields: graphql.Fields{
20            "id":        &graphql.Field{Type: graphql.String},
21            "content":   &graphql.Field{Type: graphql.String},
22            "completed": &graphql.Field{Type: graphql.Boolean},
23        },
24    })
25
26    // Query: Ambil semua Todo
27    fields := graphql.Fields{
28        "todos": &graphql.Field{
29            Type: graphql.NewList(todoType),
30            Resolve: func(p graphql.ResolveParams) (interface{}, error) {
31                return todos, nil
32            },
33        },
34    }
35
36    rootQuery := graphql.ObjectConfig{Name: "RootQuery", Fields: fields}
37    schemaConfig := graphql.SchemaConfig{Query: graphql.NewObject(rootQuery)}
38    schema, err := graphql.NewSchema(schemaConfig)
39    if err != nil {
40        panic(err)
41    }
42
43    // Buat GraphQL handler
44    h := handler.New(&handler.Config{
45        Schema: &schema,
46        Pretty: true,
47        GraphiQL: true,
48    })
49
50    http.Handle("/graphql", h)
51    http.ListenAndServe(":8080", nil)
52}

Penjelasan:

  • TODO Type: Mendefinisikan struktur data Todo.
  • Query “todos”: Mengembalikan list todo.
  • Menggunakan handler untuk endpoint /graphql, sehingga bisa dicoba langsung via GraphiQL.

2. Membuat React App yang Terkoneksi ke Backend GraphQL

Kita akan gunakan Apollo Client sebagai GraphQL client untuk React, karena stabil, terkenal, dan dokumentasinya lengkap.

Installasi Apollo Client

shell
1npm install @apollo/client graphql

Membuat Query Client

js
1// src/apollo.js
2import { ApolloClient, InMemoryCache } from '@apollo/client';
3
4export const client = new ApolloClient({
5  uri: 'http://localhost:8080/graphql',
6  cache: new InMemoryCache(),
7});

Membuat Komponen Fetch Todo

js
 1import React from 'react';
 2import { ApolloProvider, useQuery, gql } from '@apollo/client';
 3import { client } from './apollo';
 4
 5const GET_TODOS = gql`
 6  query GetTodos {
 7    todos {
 8      id
 9      content
10      completed
11    }
12  }
13`;
14
15function TodoList() {
16  const { loading, error, data } = useQuery(GET_TODOS);
17
18  if (loading) return <p>Memuat...</p>;
19  if (error) return <p>Error: {error.message}</p>;
20
21  return (
22    <ul>
23      {data.todos.map((todo) => (
24        <li key={todo.id}>
25          {todo.content} {todo.completed ? "✔️" : ""}
26        </li>
27      ))}
28    </ul>
29  );
30}
31
32function App() {
33  return (
34    <ApolloProvider client={client}>
35      <h1>Todo List</h1>
36      <TodoList />
37    </ApolloProvider>
38  );
39}
40
41export default App;

3. Simulasi End-to-End

Mari tinjau flow:

  1. Frontend (React) mengirim Query ke /graphql pada Go server (lihat query GET_TODOS di atas).
  2. Backend (Go) menerima query, menjalankan resolver, dan mengirim data.
  3. Apollo Client menerima data, komponen React me-render UI.

4. Tabel Perbandingan: REST vs GraphQL

RESTGraphQL
EndpointBanyak, berdasarkan resource1 endpoint
ResponseBentuk fixedDapat ditentukan saat query
Over/Under-fetchSering terjadiJarang, klien ambil sesuai kebutuhan
DokumentasiSwagger, OpenAPI manualSelf-documenting (via introspection & tools: GraphiQL, etc.)

5. TroubleShooting & Tips

  • CORS
    Saat frontend dan backend berjalan di port berbeda, aktifkan CORS di backend Go.

    go
     1// Tambahkan middleware sederhana untuk CORS
     2http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
     3    w.Header().Set("Access-Control-Allow-Origin", "*")
     4    if r.Method == "OPTIONS" {
     5        w.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS")
     6        w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
     7        return
     8    }
     9    http.DefaultServeMux.ServeHTTP(w, r)
    10})
  • Jangan lupa jalankan server Go sebelum npm start React App.

  • Gunakan GraphiQL di browser untuk eksplorasi & debugging query.


6. Pengembangan Lanjut

  • Menambah Mutation:
    Definisikan mutation di backend, kolaborasi dengan Apollo di frontend.
  • Auth:
    Integrasikan JWT atau mekanisme OAuth untuk authentikasi.
  • Deployment:
    Gunakan Docker/docker-compose agar dev/prod lebih mudah.

Penutup

Menyambungkan React App dengan backend graphql-go itu relatif straight-forward, dan sangat powerful untuk aplikasi modern. Kombinasi keduanya cocok untuk tim kecil hingga enterprise dengan kebutuhan data fleksibel.

Kedepannya, GraphQL akan semakin populer seiring tren frontend-driven development makin diadopsi.
Selamat mencoba, semoga bermanfaat untuk project Anda berikutnya!


Referensi


Diskusi dan pertanyaan?
Silakan tulis di kolom komentar! 👋

Artikel Terkait

💬 Komentar