,以获得更好的阅读体验!单击此处获取本文的链接什么是GraphQL?GraphQL官方解释是API的一种查询语言。这可能不太容易理解。比如传统的请求用户数据的restFulAPI:这个API总是会返回三个属性:id、name、avatar。如果我们不需要avatar属性怎么办?我们可以请后端的小哥哥小姐姐帮忙去掉头像属性,或者自己写一个新的接口来做。那么,前端能否控制必填字段呢?答案是肯定的,GraphQL就是为此而生。下面的代码块是一个graphQL查询语句。当我们只需要账户的id和name时,我们可以这样写查询。如果我们需要头像,我们可以添加头像。{account{idname}}相对于restFulAPI,graphQL更加灵活,可以准确获取想要的数据。结论:查询语句放在前端,需要的数据由前端控制,是API的查询语言。为什么使用GraphQL?获取多个字段冗余的数据,只用一个请求就可以清楚地描述所有数据类型。如何使用GraphQL作为数据结构?这里我使用nestjs作为后台服务器,不熟悉nestjs的朋友可以点这里了解nestjs。创建后端服务npmi-g@nestjs/clinestnewgraph-qlcdgraph-qlinstallgraphQL相关依赖yarnadd@nestjs/graphqlapollo-server-expressgraphql-toolsgraphqlreferenceGraphQLModuleinApplicationModuleimport{Module}from'@nestjs/common';import{GraphQLModule}from'@nestjs/graphql';@Module({imports:[GraphQLModule.forRoot({}),],})exportclassApplicationModule{}设置Schema的路径,以便GraphQL检测我们的graphql文件GraphQLModule.forRoot({typePaths:['./**/*.graphql'],}),创建我们的账户查询并在src下新建一个名为account的文件夹,以及相关的代码文件#account.graphqltypeAccount{id:Intname:Stringavatar:String}typeQuery{account(id:ID!):Account}//account.schema.tsexport抽象类Account{id?:number;名称?:字符串;avatar?:string;}//account.resolvers.tsimport{ParseIntPipe}from'@nestjs/common';import{Args,Query,Resolver}from'@nestjs/graphql';import{Account}from'./account.模式';constaccount:账号={id:0,name:'eick',avatar:'https://avatars0.githubusercontent.com/u/22267244'}@Resolver('Account')exportclassAccountResolvers{@Query('account')asyncaccount(@Args('id',ParseIntPipe)id:number):Promise
