Update book

This commit is contained in:
sunli 2020-04-15 17:19:26 +08:00
parent f737701a25
commit c0a05536a9
2 changed files with 47 additions and 0 deletions

View File

@ -1 +1,13 @@
# 介绍
`Async-graphql`是用Rust语言实现的GraphQL服务端库。它完全兼容GraphQL规范以及绝大部分的扩展功能类型安全并且高性能。
你可以用Rust语言的方式来定义Schema过程宏会自动生成GraphQL查询的框架代码没有扩展Rust的语法意味着Rustfmt可以正常使用我很看重这一点这也是为什么我会开发Async-graphql的原因之一。
## 为什么我要开发Async-graphql
我喜欢GraphQL和Rust之前我一直用`Juniper`它解决了我用Rust实现GraphQL服务器的问题但也有一些遗憾其中最重要的是它当时不支持async/await所以我决定自己做一个给自己用。
## Async-graphql的现状
今天2020年04月15日写这篇文档的时候刚好距离我开始Async-graphql的开发一个半月它已经大大超出了当初我设定的目标成为了一个全功能的GraphQL服务端库。

View File

@ -0,0 +1,35 @@
# 快速开始
## 添加依赖
```toml
[dependencies]
async-graphql = "1.9.0"
```
## 写一个Schema
一个GraphQL的Schema包含一个必须的查询(Query)根对象,可选的变更(Mutation)根对象和可选的订阅(Subscription)根对象这些对象类型都是用Rust语言的struct来描述它们结构的字段对应GraphQL对象的字段但你需要用`#[field]`来修饰它,这样`Async-graphql`提供的过程宏才能够正确的识别它。
Async-graphql实现了常用数据类型到GraphQL类型的映射例如`i32`, `f64`, `Option<T>`, `Vec<T>`等。同时,你也能够[扩展这些基础类型](custom_scalars.md)基础数据类型在GraphQL里面称为标量。
下面是一个简单的例子,我们只提供一个查询,返回`a`和`b`的和。
```rust
use async_graphql::*;
struct Query;
#[Object]
impl Query {
#[field(desc = "Returns the sum of a and b")]
async fn add(a: i32, b: i32) -> i32 {
a + b
}
}
type MySchema = Schema<Query, EmptyMutation, EmptySubscription>;
```
## 执行查询