Template ini menyediakan Node.js Starter Project yang telah dikonfigurasi dengan GraphQL untuk API, Redis untuk caching dan penyimpanan data sementara, JWT untuk otentikasi dan otorisasi, serta Sequelize untuk ORM yang terhubung ke database relasional seperti PostgreSQL atau MySQL. Proyek ini memiliki struktur modular yang memungkinkan Anda untuk langsung mengembangkan aplikasi web modern dengan fitur-fitur yang telah terintegrasi dan dapat diskalakan.
📋 Ikhtisar Proyek
Proyek ini dirancang untuk memudahkan pengembangan aplikasi backend dengan API GraphQL yang menggunakan Redis untuk caching data dan JWT untuk mengamankan API. Sequelize digunakan sebagai ORM untuk memudahkan interaksi dengan database relasional. Selain itu, terdapat middleware yang memudahkan penanganan otentikasi, validasi, dan logging.
Fitur Utama
- GraphQL API untuk query dan mutasi data yang lebih fleksibel dan efisien
- JWT Authentication untuk otentikasi berbasis token yang aman
- Redis untuk caching data dan meningkatkan performa aplikasi
- Sequelize ORM untuk pengelolaan database relasional
- Middleware untuk otorisasi dan penanganan request secara terpusat
- Modular dan terstruktur dengan baik untuk skalabilitas dan pemeliharaan yang lebih mudah
🛠️ Teknologi yang Digunakan
- Node.js: Platform untuk membangun aplikasi server-side dengan JavaScript. Pelajari lebih lanjut
- GraphQL: Query language untuk API yang memungkinkan pengambilan data secara efisien dan fleksibel. Pelajari lebih lanjut
- Redis: Penyimpanan data sementara (in-memory) yang sering digunakan untuk caching dan message brokering. Pelajari lebih lanjut
- JWT: Teknologi otentikasi berbasis token yang aman dan sederhana. Pelajari lebih lanjut
- Sequelize: ORM untuk Node.js yang mendukung PostgreSQL, MySQL, dan database relasional lainnya. Pelajari lebih lanjut
🚀 Langkah-langkah untuk Menyiapkan dan Menjalankan Proyek
1. Mengkloning Repositori
Pertama-tama, kloning repositori template ini ke mesin lokal Anda:
git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api
Jika Anda memulai dari awal, inisialisasi proyek baru dengan:
mkdir blog-api
cd blog-api
npm init -y
2. Instalasi Dependensi
Setelah mengkloning repositori atau membuat proyek baru, jalankan perintah untuk menginstal dependensi yang diperlukan:
yarn install
Ini akan menginstal semua dependensi yang tercantum dalam file package.json
.
3. Konfigurasi Environment
Buat file .env
di direktori root proyek dan tambahkan konfigurasi berikut untuk Redis, JWT, dan Database:
DATABASE_URL="postgresql://user:password@localhost:5432/mydatabase"
JWT_SECRET="your_jwt_secret_key"
REDIS_HOST="localhost"
REDIS_PORT="6379"
Gantilah user
, password
, dan mydatabase
sesuai dengan konfigurasi database Anda.
4. Menyiapkan Database dengan Sequelize
Jika Anda belum memiliki database yang terkonfigurasi, jalankan perintah untuk menginisialisasi Sequelize dan membuat model:
yarn sequelize init
Ini akan membuat struktur direktori config
, models
, dan migrations
di dalam proyek Anda. Selanjutnya, buat model yang diperlukan untuk aplikasi seperti User dan Post, serta lakukan migrasi untuk membuat tabel di database.
yarn sequelize db:migrate
Pastikan database sudah berjalan (misalnya menggunakan PostgreSQL atau MySQL).
5. Menyiapkan Server GraphQL
Install dependensi untuk Apollo Server dan GraphQL:
yarn add apollo-server graphql
Setelah itu, buat file konfigurasi server GraphQL, schema, dan resolvers. Anda bisa mengonfigurasi server GraphQL dengan cara berikut:
src/server.ts
import { ApolloServer } from 'apollo-server-express';
import express from 'express';
import { typeDefs, resolvers } from './graphql';
import { authenticateJWT } from './middlewares/auth';
import { sequelize } from './config/database';
const app = express();
// Gunakan middleware JWT
app.use(authenticateJWT);
// Inisialisasi Apollo Server
const server = new ApolloServer({
typeDefs,
resolvers,
context: ({ req }) => ({ user: req.user }),
});
server.applyMiddleware({ app });
const PORT = process.env.PORT || 4000;
app.listen(PORT, async () => {
console.log(`Server running at http://localhost:${PORT}${server.graphqlPath}`);
await sequelize.authenticate();
console.log('Database connected');
});
src/graphql/schema.ts
Definisikan schema GraphQL untuk query dan mutasi:
import { gql } from 'apollo-server-express';
export const typeDefs = gql`
type User {
id: ID!
username: String!
}
type Post {
id: ID!
title: String!
content: String!
user: User!
}
type Query {
posts: [Post]
post(id: ID!): Post
users: [User]
}
type Mutation {
createPost(title: String!, content: String!): Post
register(username: String!, password: String!): User
login(username: String!, password: String!): String # JWT token
}
`;
src/graphql/resolvers.ts
Implementasikan resolvers untuk query dan mutasi:
import { Post, User } from '../models';
import jwt from 'jsonwebtoken';
import bcrypt from 'bcryptjs';
export const resolvers = {
Query: {
posts: () => Post.findAll(),
post: (_, { id }) => Post.findByPk(id),
users: () => User.findAll(),
},
Mutation: {
createPost: async (_, { title, content }, { user }) => {
if (!user) throw new Error('Authentication required');
const post = await Post.create({ title, content, userId: user.id });
return post;
},
register: async (_, { username, password }) => {
const hashedPassword = await bcrypt.hash(password, 10);
const user = await User.create({ username, password: hashedPassword });
return user;
},
login: async (_, { username, password }) => {
const user = await User.findOne({ where: { username } });
if (!user) throw new Error('User not found');
const match = await bcrypt.compare(password, user.password);
if (!match) throw new Error('Invalid password');
const token = jwt.sign({ userId: user.id }, process.env.JWT_SECRET!, { expiresIn: '1h' });
return token;
},
},
};
6. Menjalankan Server untuk Pengembangan
Untuk menjalankan server di lingkungan pengembangan dengan hot-reload, gunakan perintah berikut:
yarn dev
Server akan berjalan di http://localhost:4000
, dan Anda dapat mengakses GraphQL Playground untuk menguji query dan mutasi API.
📂 Struktur Direktori Proyek
Struktur direktori proyek ini dirancang untuk memisahkan berbagai bagian aplikasi agar lebih modular dan mudah dipelihara:
/myapp
├── src
│ ├── middlewares # Berisi middleware untuk otentikasi (JWT), caching (Redis), dan validasi
│ ├── routes # Definisi endpoint API dan resolver GraphQL
│ ├── services # Logika bisnis utama dan pengolahan data
│ ├── app.ts # File utama untuk inisialisasi aplikasi dan middleware
│ ├── graphql # Menyimpan konfigurasi GraphQL, schema, dan resolvers
│ ├── models # Model Sequelize untuk mengelola database relasional
│ ├── config # File konfigurasi global untuk Redis, JWT, database, dll
│ ├── index.ts # Entry point aplikasi, menginisialisasi server dan middleware
│ ├── resolvers # Berisi resolver GraphQL untuk query dan mutasi
│ ├── server.ts # File untuk setup Apollo Server dan konfigurasi GraphQL
│ ├── schema # Definisi schema GraphQL
│ ├── types # TypeScript types dan interfaces untuk GraphQL dan lainnya
│ └── utils # Berisi helper dan fungsi utility
├──
.env # File konfigurasi environment (Redis, JWT Secret, Database URL)
├── package.json # Metadata proyek dan dependensi
└── tsconfig.json # Konfigurasi TypeScript
📦 Deployment
Untuk mempersiapkan proyek untuk produksi, gunakan perintah berikut untuk membangun TypeScript menjadi JavaScript:
yarn build
Output akan berada di folder dist/
dan siap untuk di-deploy ke server produksi.
Menyiapkan untuk Platform Cloud
Proyek ini dapat di-deploy ke platform seperti Heroku, AWS, atau DigitalOcean dengan langkah-langkah berikut:
- Push Kode ke Repositori Git (GitHub, GitLab, atau lainnya).
- Atur Variabel Environment di platform cloud yang dipilih (Redis, JWT Secret, Database URL).
- Deploy proyek menggunakan perintah atau integrasi dari platform cloud.
📚 Sumber Daya
Dengan mengikuti langkah-langkah di atas, Anda sekarang dapat menjalankan dan mengembangkan aplikasi GraphQL API menggunakan Redis, JWT, dan Sequelize.
Top comments (0)