在大型前端应用的开发过程中,如何管理好数据是一件非常具有挑战性的事情。后端工程师需要聚合多个数据源的数据,然后分发到大前端的各个端,而大前端工程师需要考虑如何在实现一个端点的基础上对端的数据进行管理。良好的用户体验视图(乐观的UI1)。状态。在团队中使用GraphQL可以很好的解决数据管理的痛点。接下来,本文将介绍GraphQL声明式获取数据的方式,这将简化数据管理的难度,提升网络性能。它还将介绍Apollo2如何通过一系列提供良好开发者体验的工具来提高工程师的开发效率。译注一:OptimisticUI是一种UI设计模式。比如你在微信上发一条消息,它会直接显示出来,而不是等待消息的网络请求成功或失败。optimisticUI的数据管理非常复杂。它需要先显示模拟数据,然后等待网络请求成功或失败,再显示真实数据。通过Apollo可以轻松实现OptimisticUI。译注2:Apollo是实现,GraphQL是标准,和JS/ECMA的关系是一样的。开发人员体验Apollo可帮助团队更快地将功能推向市场,因为它具有出色的开发人员体验。Apollo的目标是“简化堆栈中的数据管理”。通过ApolloClient、ApolloServer、ApolloEngine,以前需要费一番功夫才能实现的全栈缓存、数据归一化、乐观UI等功能现在变得非常简单。请求你想要的数据GraphQL的强类型查询语言特性允许开发者使用强大的工具来请求GraphQL接口。通过GraphQL自省系统,开发者可以查询GraphQLschema3信息,包括字段和类型。内省系统有一些非常酷的功能,比如自动生成的文档、代码完成等等。注解3:schema用来描述你想要的数据的结构和字段,比如:{dogs{idbreedimage{url}activities{name}}}GraphQLPlaygroundPrisma团队开发的GraphQLPlayground工具是一款优秀的可以从自定义模式和查询历史自动生成文档的IDE。只需查看它,您就知道GraphQLAPI中有哪些数据可用,而无需深入研究后端代码或了解数据的来源。ApolloServer2.0内置了GraphQLPlayground,可以让您更轻松地浏览schema和执行查询命令。ApolloDevToolsApolloDevTools是一个Chrome扩展,可以查询Apollo的前端缓存(Cache)、记录查询(Queries)和变更(Mutations)。您还可以使用ApolloDevTools中的GraphiQL轻松测试前端查询。简化前端代码如果你使用过REST和Redux等状态管理库,为了发起网络请求,你需要编写actioncreators、reducers、mapStateToProps并集成中间件。有了ApolloClient,你就不用再关心这些了。ApolloClient解决一切,你只需要专注于查询,而不用写一堆状态管理代码。从“apollo-boost”导入ApolloClient;constclient=newApolloClient({uri:"https://dog-graphql-api.glitch.me/graphql"});一些团队声称,他们在切换到ApolloClient后,删除了数千行状态管理代码和一堆复杂的逻辑。这是因为ApolloClient不仅支持远程数据管理,还支持本地数据管理。Apollo缓存是当前应用程序全局状态的唯一真实来源。现代工具Apolloplatform4允许团队使用现代工具来帮助他们快速查找错误、查看API和开发具有挑战性的缓存功能。译注4:Apollo平台是一个云平台。阿波罗在本文中有两层含义。首先,Apollo是GraphQL的开源实现。其次,Apollo是一家开发Apollo平台、ApolloClient、ApolloServer等产品的公司。ApolloEngine是GraphQL生态系统中唯一为API提供监控和分析的工具。引擎可以显示每个解析器的埋索引5,帮助您定位错误,并分析架构中请求的每个字段的分布频率。您也可以将这些数据传输到您正在使用的其他分析平台,例如DataDog,并在某些数据超过警报阈值设置时发出警报。注释5:解析器处理返回字段的功能。使用GraphQL获取声明式数据的主要优点之一是它具有获取声明式数据的能力。不需要前端请求多个接口,不需要手动聚合数据。你只需要准确地描述它。你想要的数据,然后GraphQL就会把你想要的数据返回给你。使用REST,需要调用各个接口,过滤出自己想要的数据,然后将过滤后的数据构造成组件需要的结构。GET/api/dogs/breedsGET/api/dogs/imagesGET/api/dogs/activitiesREST的方法不仅不好用,而且容易出错,逻辑难以跨平台复用。将其与GraphQL的声明式方法进行对比:constGET_DOGS=gql`query{dogs{idbreedimage{url}activities{name}}}`;上面,我们定义了我们想要从服务器获取的对象的结构。GraphQL负责组合和过滤数据,同时返回我们想要的数据字段和结构。如何使用GraphQL查询?ApolloClient构建了一个用于声明式请求数据的GraphQL方法。在React应用程序中,所有用于获取数据、跟踪加载和错误状态以及更新UI的逻辑都封装在一个Query组件中。这种封装方式使得数据采集组件和展示组件的组合变得容易。下面看看如何在React应用中使用ApolloClient获取GraphQL数据:constFeed=()=>({/*数据获取组件Query*/}
