Convert Figma logo to code with AI

nestjs logographql

GraphQL (TypeScript) module for Nest framework (node.js) 🍷

1,450
391
1,450
81

Top Related Projects

🌍  Spec-compliant and production ready JavaScript GraphQL server that lets you develop in a schema-first way. Built for Express, Connect, Hapi, Koa, and more.

A reference implementation of GraphQL for JavaScript

🧘 Rewrite of a fully-featured GraphQL Server with focus on easy setup, performance & great developer experience. The core of Yoga implements WHATWG Fetch API and can run/deploy on any JS environment.

3,395

Code-First, Type-Safe, GraphQL Schema Construction

Blazing fast, instant realtime GraphQL APIs on your DB with fine grained access control, also trigger webhooks on database events.

Awesome list of GraphQL

Quick Overview

NestJS/GraphQL is a module for integrating GraphQL into NestJS applications. It provides a powerful and flexible way to build GraphQL APIs using TypeScript decorators and NestJS's dependency injection system. The module supports both code-first and schema-first approaches, making it versatile for different development preferences.

Pros

  • Seamless integration with NestJS ecosystem and features
  • Strong typing and auto-generated TypeScript definitions
  • Support for both code-first and schema-first approaches
  • Built-in tools for subscriptions, authentication, and authorization

Cons

  • Steeper learning curve for developers new to NestJS or GraphQL
  • Can be overkill for simple API projects
  • Performance overhead compared to bare-bones GraphQL implementations
  • Limited flexibility in some advanced GraphQL scenarios

Code Examples

  1. Defining a GraphQL resolver:
@Resolver(of => Author)
export class AuthorsResolver {
  constructor(private authorsService: AuthorsService) {}

  @Query(returns => Author)
  async author(@Args('id', { type: () => Int }) id: number) {
    return this.authorsService.findOneById(id);
  }
}
  1. Creating a GraphQL object type:
@ObjectType()
export class Author {
  @Field(type => Int)
  id: number;

  @Field({ nullable: true })
  firstName?: string;

  @Field({ nullable: true })
  lastName?: string;

  @Field(type => [Post])
  posts: Post[];
}
  1. Implementing a mutation:
@Mutation(returns => Author)
async createAuthor(@Args('createAuthorInput') createAuthorInput: CreateAuthorInput) {
  return this.authorsService.create(createAuthorInput);
}

Getting Started

  1. Install the required packages:
npm i @nestjs/graphql @nestjs/apollo graphql apollo-server-express
  1. Import the GraphQLModule in your app.module.ts:
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';

@Module({
  imports: [
    GraphQLModule.forRoot<ApolloDriverConfig>({
      driver: ApolloDriver,
      autoSchemaFile: 'schema.gql',
    }),
  ],
})
export class AppModule {}
  1. Create your first resolver and run the application:
@Resolver()
export class HelloResolver {
  @Query(() => String)
  sayHello(): string {
    return 'Hello, GraphQL!';
  }
}

Competitor Comparisons

🌍  Spec-compliant and production ready JavaScript GraphQL server that lets you develop in a schema-first way. Built for Express, Connect, Hapi, Koa, and more.

Pros of Apollo Server

  • More flexible and framework-agnostic, allowing integration with various Node.js frameworks
  • Extensive documentation and large community support
  • Built-in features like caching, subscriptions, and file uploads

Cons of Apollo Server

  • Requires more setup and configuration for complex applications
  • Less opinionated structure, which may lead to inconsistent code organization
  • Lacks built-in dependency injection and module system

Code Comparison

Apollo Server:

const { ApolloServer } = require('apollo-server');
const typeDefs = require('./schema');
const resolvers = require('./resolvers');

const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(({ url }) => console.log(`Server ready at ${url}`));

NestJS GraphQL:

import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';

@Module({
  imports: [
    GraphQLModule.forRoot<ApolloDriverConfig>({
      driver: ApolloDriver,
      autoSchemaFile: 'schema.gql',
    }),
  ],
})
export class AppModule {}

The Apollo Server example shows a more straightforward setup, while the NestJS GraphQL code demonstrates integration with the NestJS framework, leveraging its module system and dependency injection.

A reference implementation of GraphQL for JavaScript

Pros of graphql-js

  • More flexible and can be used with any Node.js framework
  • Provides lower-level control over GraphQL implementation
  • Extensive documentation and community support

Cons of graphql-js

  • Requires more boilerplate code for setup and configuration
  • Less opinionated, which may lead to inconsistent implementations
  • Steeper learning curve for beginners

Code Comparison

graphql-js:

const { GraphQLObjectType, GraphQLString, GraphQLSchema } = require('graphql');

const QueryType = new GraphQLObjectType({
  name: 'Query',
  fields: {
    hello: {
      type: GraphQLString,
      resolve: () => 'Hello, World!'
    }
  }
});

const schema = new GraphQLSchema({ query: QueryType });

nestjs/graphql:

import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';

@Module({
  imports: [
    GraphQLModule.forRoot<ApolloDriverConfig>({
      driver: ApolloDriver,
      autoSchemaFile: true,
    }),
  ],
})
export class AppModule {}

The graphql-js example shows a basic schema definition, while the nestjs/graphql example demonstrates module configuration. nestjs/graphql provides a more structured approach with less boilerplate, leveraging NestJS decorators and modules for a cleaner implementation.

🧘 Rewrite of a fully-featured GraphQL Server with focus on easy setup, performance & great developer experience. The core of Yoga implements WHATWG Fetch API and can run/deploy on any JS environment.

Pros of GraphQL Yoga

  • Lightweight and flexible, easy to set up and use
  • Framework-agnostic, can be integrated with various Node.js frameworks
  • Built-in support for subscriptions and file uploads

Cons of GraphQL Yoga

  • Less opinionated, requiring more manual configuration
  • Fewer built-in features compared to NestJS GraphQL module
  • May require additional libraries for advanced features

Code Comparison

GraphQL Yoga:

import { createServer } from '@graphql-yoga/node'

const server = createServer({
  schema: mySchema,
  context: myContext
})

server.start()

NestJS GraphQL:

import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';

@Module({
  imports: [
    GraphQLModule.forRoot({
      autoSchemaFile: 'schema.gql',
    }),
  ],
})
export class AppModule {}

GraphQL Yoga offers a more straightforward setup, while NestJS GraphQL provides a more structured, decorator-based approach integrated with the NestJS ecosystem. GraphQL Yoga is better suited for lightweight applications or when flexibility is crucial, whereas NestJS GraphQL excels in large-scale, enterprise applications leveraging the full NestJS framework capabilities.

3,395

Code-First, Type-Safe, GraphQL Schema Construction

Pros of Nexus

  • Type-safe schema definition with auto-generated TypeScript types
  • Declarative and code-first approach to schema design
  • Plugins ecosystem for extending functionality

Cons of Nexus

  • Steeper learning curve for developers new to code-first GraphQL
  • Less integrated with a full-stack framework compared to NestJS

Code Comparison

Nexus schema definition:

const Query = objectType({
  name: 'Query',
  definition(t) {
    t.list.field('users', {
      type: 'User',
      resolve: () => fetchUsers(),
    })
  },
})

NestJS GraphQL resolver:

@Resolver('User')
export class UserResolver {
  @Query(() => [User])
  async users() {
    return this.userService.findAll();
  }
}

Key Differences

  • Nexus focuses on schema definition and type generation
  • NestJS GraphQL integrates with the broader NestJS ecosystem
  • Nexus uses a more functional approach, while NestJS leverages decorators

Use Cases

  • Nexus: Ideal for projects prioritizing type safety and schema-driven development
  • NestJS GraphQL: Better suited for full-stack applications using the NestJS framework

Blazing fast, instant realtime GraphQL APIs on your DB with fine grained access control, also trigger webhooks on database events.

Pros of GraphQL Engine

  • Automatic GraphQL API generation from existing databases
  • Real-time subscriptions and live queries out of the box
  • Powerful authorization and access control system

Cons of GraphQL Engine

  • Less flexibility for custom business logic implementation
  • Steeper learning curve for complex schema designs
  • Limited support for non-PostgreSQL databases

Code Comparison

GraphQL Engine (Hasura):

tables:
  - table:
      schema: public
      name: users
    array_relationships:
      - name: posts
        using:
          foreign_key_constraint_on:
            column: author_id
            table:
              schema: public
              name: posts

NestJS GraphQL:

@ObjectType()
export class User {
  @Field()
  id: number;

  @Field()
  name: string;

  @Field(() => [Post])
  posts: Post[];
}

GraphQL Engine excels in rapid API development with existing databases, offering real-time capabilities and robust access control. However, it may be less suitable for complex custom logic or non-PostgreSQL setups. NestJS GraphQL provides more flexibility and integration with NestJS ecosystem but requires more manual setup. GraphQL Engine uses YAML for schema definition, while NestJS GraphQL leverages TypeScript decorators for type-safe schema creation.

Awesome list of GraphQL

Pros of awesome-graphql

  • Comprehensive resource collection for GraphQL ecosystem
  • Language-agnostic, covering various frameworks and tools
  • Regularly updated with community contributions

Cons of awesome-graphql

  • Not a functional library or framework
  • Requires additional effort to implement GraphQL in projects
  • May overwhelm beginners with too many options

Code comparison

While awesome-graphql doesn't provide direct code examples, nestjs/graphql offers a framework-specific implementation:

// nestjs/graphql example
@Resolver(of => Author)
export class AuthorsResolver {
  @Query(returns => Author)
  async author(@Args('id', { type: () => Int }) id: number) {
    return this.authorsService.findOneById(id);
  }
}

awesome-graphql would instead point to various GraphQL implementations, such as:

// Apollo Server example
const resolvers = {
  Query: {
    author: (parent, { id }, context) => {
      return context.authorsService.findOneById(id);
    },
  },
};

Summary

awesome-graphql serves as a curated list of GraphQL resources, while nestjs/graphql is a specific implementation for NestJS. The former offers a broader perspective but requires more setup, while the latter provides a ready-to-use solution within the NestJS ecosystem.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Nest Logo

A progressive Node.js framework for building efficient and scalable server-side applications.

NPM Version Package License NPM Downloads CircleCI Coverage Discord Backers on Open Collective Sponsors on Open Collective

Description

GraphQL is a powerful query language for APIs and a runtime for fulfilling those queries with your existing data. It's an elegant approach that solves many problems typically found with REST APIs. For background, we suggest reading this comparison between GraphQL and REST. GraphQL combined with TypeScript helps you develop better type safety with your GraphQL queries, giving you end-to-end typing.

Quick Start

Overview & Tutorial

Support

Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please read more here.

Stay in touch

License

Nest is MIT licensed.

NPM DownloadsLast 30 Days