GraphQL最大的优势在于简化了请求响应的内容,不会有多余的字段。前端可以决定从后端返回什么数据。但需要注意的是,前端的决策权取决于后端支持什么数据,所以GraphQL更像是简化返回值的REST,后端接口也可以定义所有一次运行,不需要一个一个开发。看一下GraphQL的定义:GraphQL是一种新的API标准,它提供了一种比REST更高效、更强大、更灵活的替代方案。它由Facebook开发和开源,现在由来自世界各地的公司和个人组成的大型社区维护。GraphQL本质上是一种基于API的查询语言。现在大多数应用程序都需要从服务器获取数据。这些数据存储可以存储在数据库中。API的职责是提供一个接口来存储符合应用程序要求的数据。.它独立于数据库,可以在任何使用API的环境中有效使用。我们可以理解为GraphQL是基于API的一层封装,目的是更好更灵活的适应业务需求的变化。简单地说,GraphQL是一种旨在降低从客户端调用API的复杂性的语言。让前端有更多的空间去操作数据调用。后端API无非就是CRUD,提供数据服务。但是经常会出现前后端数据模型不一致,或者API文档过时,版本管理麻烦等问题。GraphQL为前端和后端API使用一致的架构。API提供数据服务的能力是标准化的,获取和写入数据都需要进行数据模型验证,类似于TypeScript的强制类型,避免了数据类型带来的灾难性错误。无代码开发平台,积木库使用GraphQL作为前后端数据传输的中间件,使用ApolloGraphQL框架,后端使用NodeJs和ApolloServer,使用NextJs和ApolloClient进行前端。GraphQL包含了完整的缓存处理机制,根据策略采用不同的缓存方式,比如本地缓存优先级或者网络优先级。创建客户端API端口,从“@apollo/client”导入{ApolloClient,InMemoryCache};constclient=newApolloClient({uri:"https://admin.jimuku.com/graphql",cache:newInMemoryCache(),});exportdefaultclient;Query查询语句:querystart($host:String){start(host:$host){codesuccessmessagedata{touriststemplate}}}Playgroundpanel根据Query返回结果q??uery:{"data":{"start":{"code":200,"success":true,"message":"success","data":{"tourists":false,"template":"official"}}}}Data返回的字段可以在Query中指定。这样,请求的粒度就更细了,细化到每个字段。在React组件的代码中:exportasyncfunctiongetStaticProps(){const{data}=awaitclient.query({query:gql`queryCountries{countries{codenameemoji}}`,});return{props:{countries:data.countries.slice(0,4),},};}页面中实际的使用: {country.code}-{country.emoji}
