이 템플릿은 API용 GraphQL, API용 Redis로 구성된 Node.js 스타터 프로젝트를 제공합니다. 캐싱 및 임시 데이터 저장, 인증 및 권한 부여를 위한 JWT, ORM을 위한 Sequelize PostgreSQL 또는 MySQL과 같은 관계형 데이터베이스에 연결됩니다. 이 프로젝트는 통합되고 확장 가능한 기능을 갖춘 최신 웹 애플리케이션을 즉시 개발할 수 있는 모듈식 구조를 가지고 있습니다.
이 프로젝트는 데이터 캐싱을 위해 Redis를 사용하고 API 보안을 위해 JWT를 사용하는 GraphQL API를 사용하여 백엔드 애플리케이션을 보다 쉽게 개발할 수 있도록 설계되었습니다. Sequelize는 관계형 데이터베이스와의 상호 작용을 촉진하기 위한 ORM으로 사용됩니다. 또한 인증, 검증, 로깅을 보다 쉽게 처리할 수 있는 미들웨어도 있습니다.
우선, 이 템플릿 저장소를 로컬 머신에 복제하세요:
git clone https://gitlab.com/dioarafi1/graphify-api.git cd graphify-api
처음부터 시작하는 경우 다음을 사용하여 새 프로젝트를 초기화하세요.
mkdir blog-api cd blog-api npm init -y
저장소를 복제하거나 새 프로젝트를 생성한 후 다음 명령을 실행하여 필요한 종속성을 설치합니다.
yarn install
이렇게 하면 package.json 파일에 나열된 모든 종속성이 설치됩니다.
프로젝트 루트 디렉터리에 .env 파일을 생성하고 Redis, JWT 및 데이터베이스:
에 대해 다음 구성을 추가합니다.
DATABASE_URL="postgresql://user:password@localhost:5432/mydatabase" JWT_SECRET="your_jwt_secret_key" REDIS_HOST="localhost" REDIS_PORT="6379"
데이터베이스 구성에 따라 사용자, 비밀번호 및 mydatabase를 변경합니다.
구성된 데이터베이스가 없는 경우 다음 명령을 실행하여 Sequelize를 초기화하고 모델을 생성하세요.
yarn sequelize init
이렇게 하면 프로젝트 내에 구성, 모델 및 마이그레이션 디렉터리 구조가 생성됩니다. 다음으로 User, Post 등 애플리케이션에 필요한 모델을 생성하고 마이그레이션을 수행하여 데이터베이스에 테이블을 생성합니다.
yarn sequelize db:migrate
데이터베이스가 실행 중인지 확인하세요(예: PostgreSQL 또는 MySQL 사용).
Apollo Server 및 GraphQL에 대한 종속성 설치:
yarn add apollo-server graphql
그런 다음 GraphQL 서버 구성 파일, 스키마 및 해석기를 생성합니다. 다음과 같은 방법으로 GraphQL 서버를 구성할 수 있습니다:
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'); });
쿼리 및 변형을 위한 GraphQL 스키마 정의:
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 } `;
쿼리 및 변형에 대한 해석기 구현:
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; }, }, };
핫 리로드를 사용하여 개발 환경에서 서버를 실행하려면 다음 명령을 사용하십시오.
yarn dev
서버는 http://localhost:4000에서 실행되며 GraphQL Playground에 액세스하여 API 쿼리 및 변형을 테스트할 수 있습니다.
이 프로젝트 디렉토리 구조는 애플리케이션의 여러 부분을 분리하여 보다 모듈화되고 유지 관리가 용이하도록 설계되었습니다.
/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
프로덕션용 프로젝트를 준비하려면 다음 명령을 사용하여 TypeScript를 JavaScript로 빌드하세요.
yarn build
출력은 dist/ 폴더에 있으며 프로덕션 서버에 배포할 준비가 됩니다.
이 프로젝트는 다음 단계에 따라 Heroku, AWS 또는 DigitalOcean와 같은 플랫폼에 배포할 수 있습니다.
위 단계를 수행하면 이제 Redis, JWT 및 Sequelize를 사용하여 GraphQL API 애플리케이션을 실행하고 개발할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3