Skip to main content

GraphQL

TieJS 是默认支持 GraphQL 的,你不需任何额外的配置,对于无历史包袱的新项目,非常推荐使用 GraphQL 来开发 API。

基本用法#

GraphQL 在 TieJS 中是开箱即用的,下面我们使用 CLI 工具 tie-cli 快速体验。

使用 tie-cli 初始化应用 (选择 minimal-graphql):

tie create myapp # 选择 minimal-graphql
cd myapp
npm run dev

项目结构如下:

.
├── hello.resolver.ts
├── package.json
└── tsconfig.json

启动成功后,然后访问浏览器:http://localhost:5001/graphql

这是一个最小化的 Tie GraphQL 应用,核心文件只有一个 hello.resolver.ts,代码如下:

import { Resolver, Query } from 'type-graphql'
import { Injectable } from '@tiejs/common'
@Injectable()
@Resolver(() => String)
export class HelloResolver {
@Query(() => String)
async hello() {
return 'hello world'
}
}

在 TieJS 中,xxx.resolver.ts 是 GraphQL 的端点文件,类似 MVC 架构中的 Controller。

TieJS 中内置了 GraphQL 插件 @tiejs/graphql,Tie 的 GraphQL 插件基于 TypeGraphQL,建议详细阅读 TypeGraphQL 文档。

常用功能#

上面介绍了 TieJS 中 GraphQL 最小化用法,旨在让你感官的体验 在 TieJS 中 GraphQL 用法,下面例子你将体验到 GraphQL 的常用功能,包括 Query、Mutation、Arg、ObjectType、InputType 等。

首先,我们新建如下的项目目录:

.
├── package.json
├── src
│   ├── createUser.input.ts
│   ├── user.resolver.ts
│   ├── user.service.ts
│   └── user.type.ts
└── tsconfig.json

项目代码如下:

import { Resolver, Query, Arg, Mutation } from 'type-graphql'
import { User } from './user.type'
import { UserService } from './user.service'
import { CreateUserInput } from './createUser.input'
@Resolver(() => User)
export class UserResolver {
constructor(private userService: UserService) {}
@Query(() => User, { nullable: true, description: 'get user by name' })
async user(@Arg('name') name: string): Promise<User> {
return await this.userService.getUser(name)
}
@Query(() => [User], { description: 'query user' })
async users(): Promise<User[]> {
return await this.userService.queryUser()
}
@Mutation(() => User)
async createUser(@Arg('input') input: CreateUserInput): Promise<User> {
return await this.userService.createUser(input)
}
}

使用npm run dev启动成功后,然后访问浏览器:http://localhost:5001/graphql,你就可以在 GraphQL Playground 中体验 Query 和 Mutation 了。

更多功能#

上面说了 TieJS 的 GraphQL 插件基于 TypeGraphQL,再次建议详细阅读 TypeGraphQL 文档。