首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我使用 GraphQL 而放弃 REST API?

最近,我有机会为自己的项目和客户开发和运行一些使用 GraphQL API 构建的移动和 Web 应用程序。这真是一个很好的体验,尤其要感谢令人惊叹的 PostGraphile 和 Apollo。...然后,要查询所有待办事项的id和名称,你可以编写这样一个查询: query { allTodos(limit: 5) { totalCount items { id...有很多流行的开源项目都在使用 GraphQL:这个博客是基于静态站点生成器 Gatsby,它将 GraphQL 查询的结果转换成数据,然后呈现到 HTML 文件中。...相应地,Apollo 提供了多个平台的客户端库,以及在最流行的编程语言(包括 TypeScript 和 Swift)中生成类型定义的代码生成器。...与原生 iOS 应用一样,Apollo iOS 是一个相对轻量级的、易于使用的库。 延伸阅读 https://desiatov.com/why-graphql/?

2.3K30

用TS+GraphQL查询SpaceX火箭发射数据

我们能够编写与使用它们的组件并存的查询,并且 UI 能够准确地请求它要呈现的内容。 在使用 REST API 时,我们所能找的的文档有可能不是最新的。...我们将在列表中显示这些数据,当用户点击其中一个项目时,查询 launch 来获取该火箭的更多数据。让我们在 GraphQL playground 中测试第一个查询。 ?...在查询名的后面,你可以通过使用前缀为$及类型去指定变量,然后在查询体中,你可以使用该变量。对于我们的查询,通过传递 $id 变量来设置启动的id,该变量的类型为String!。 ?...在终端中执行: 1yarn codegen 在 src/generated/graphql.ts 中,你将会找到定义程序所需的所有类型,以及获取 GraphQL 端点以检索该数据的相应查询。...添加用户交互 现在需要添加当用户点击面板中的项目时获取完整发射数据的功能。我们将在 App 组件中创建一个钩子来跟踪班次 ID 并将其传递给 LaunchProfile 组件以重新获取发射数据。

3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    GraphQL到底怎么使?看看智联前端团队技术沉淀

    } 预期数据会返回在 data 中,当有错误时,会出现 errors 字段并按照规范规定的格式展示错误。...而在研究 GraphQL 时发生的的误解在于: 规范、教程提到 query(查询)时,无法确认是指客户端侧客户端发出的 Query Document 整个操作还是,Document 中的 query 操作...关联与差异 同:在介绍 Apollo 和 type-graphql 时,跳过了执行部分的展示,是因为这两种实现生成的可执行 Schema 和 graphql-js 的是通用的,查看这两者最终生成的可执行...版本控制:客户端结构化的查询方式可以让服务追踪到字段的使用情况。且在增加字段时,根据结构化查询按需查询的特点,不会影响旧的调用(虽然 JavaScript 对多了个字段的事情不在意)。...在使用 JavaScript 开发接口服务时,相对其他各种数据模型定义的尝试,提供了定义数据模型的统一实践和强规范,也算是收益之一。

    2.3K20

    GraphQL+Koa2实现服务端API结合Apollo+Vue

    从这个意义上说,它是数据库无关的, 而且可以在使用 API 的任何环境中有效使用,我们可以理解为 GraphQL 是基于 API 之上的一 层封装,目的是为了更好,更灵活的适用于业务的需求变化 GraphQL...(GraphQLID)**:ID标量类型表示一个唯一标识符,通常用以重新获取对象或者作为缓存中的键。...query:仅获取数据(fetch)的只读请求 mutation:获取数据后还有写操作的请求 新版本的GraphQL还支持subscription,这是为了处理订阅更新这种比较复杂的实时数据更新场景而设计的操作...将它与vue-apollo和graphql一起安装: npm install vue-apollo graphql apollo-boost --save 在src/main.js中引入apollo-boost...:h=>h(App) }) 简单查询 组件加载的时候就会去服务器请求数据,请求的数据会放在navList这个属性上面,在模板中可以直接使用当前属性 简单查询文档 带参数查询参考 import gql from'graphql-tag

    5.2K42

    GraphQL在现代Web应用中的应用与优势

    GraphQL是一种现代的API查询语言,它在现代Web应用中得到了广泛的应用,因为它提供了一种高效、灵活且强大的方式来获取数据GraphQL基础快速应用示例:1....前端设置(使用Apollo Client)接着,我们需要在前端应用中配置Apollo Client,与我们的GraphQL服务器通信:npm install apollo-boost @apollo/client...查询语言:查询、突变、订阅在GraphQL中,查询和突变是通过JSON-like结构表示的字符串。...这就是GraphQL查询、类型系统和层次结构在实际应用中的体现。..., userId: ID!): Post}在Query类型中,我们定义了获取单个用户、所有用户、单篇帖子和所有帖子的查询。而在Mutation类型中,我们定义了创建新用户和新帖子的操作。

    10710

    你不知道的 GraphQL

    Graphql服务根据我们提供的schema定义,在执行请求携带的查询语句之前进行了必要的校验,如果我们的查询语句中包含了一个没有声明过的字段,我们会得到一个错误提醒: > curl 'http://localhost...因为我们在使用graphqlHTTP中间件时声明了graphiql参数,GraphiQL已经启动了。...其它逻辑应该拆分到对应的层,这样我们就能保持GraphQL非侵入业务。 你可以在Apollo官网找到关于resolvers的完整文档[14]。 处理数据依赖关系 接下来,最有意思的部分要开始了。...views } } } 如果是在SQL语言,这可能需要对其它两个表的joins操作(User和Stat),其背后SQL执行器要运行复杂的逻辑来处理查询。...但这种在响应中显示错误信息的简单处理,并没有在服务端记录错误日志。

    3.3K20

    GraphQL 实践与服务搭建

    请求进行查询,其集中的 API 如 http://localhost:3000/graphql,所有的操作都通过这个接口来执行,这会在后面的操作中在展示到。...在线体验 GraphQL​ 可以到 官网 中简单尝试入门一下,在 Studio 可在线体验 GraphQL,也可以到 SWAPI GraphQL API 中体验。...查询 personID 为 2 的 Person 并且只获取 name,eyeColor、skinColor、hairColor 字段 从上面查询案例中其实就可以发现,我只需要在 person 中写上想要获取的字段...不仅需要在后端中配置 GraphQL 服务,用于接收 GraphQL 查询并验证和执行,此外前端通常需要 GraphQL 客户端,来方便使用 GraphQL 获取数据,目前实用比较多的是Apollo Graph...在上面一开始的例子中是 Code First 方式,通常使用该方式即可,无需关心 Schema 是如何生成的。下文也会以 Code First 方式来编写 GraphQL 服务。

    5.3K10

    GraphQL最突出的架构优势是什么?

    作者 | Khalil Stemmler 策划 | 田晓旭 在服务器上使用 GraphQL 代替 REST 是有很多好处的,使用 Apollo Client 取代自己编写的数据获取逻辑也有很多优势。...locally } } }`; 在主要用于获取远程资源的查询中,我们可以使用 @client 指令来引用要基于一个客户端模式从本地缓存中获取的属性。...我们可以在同一请求中完成这一操作,这很厉害。想想之前在 Redux 环境我们要执行的 spread 和 Object.assign() 操作的数量有多少,就可以对比出差异了。...简化的数据获取架构,其中视图可以是任意前端框架——nerdwallet 数据图在连接的两端均有 Apollo 服务器和客户端,它可以简化获取逻辑、错误逻辑、重试逻辑、分页、缓存、optimistic UI...数据图从客户端延伸到服务器,并为现代 Web 应用程序中获取数据和更改状态时面临的最常见基础架构问题提供了答案 为了通过 GraphQL 与后端服务通信,Apollo Client 公开了几种客户端方法

    2.2K20

    为 Vue 配置 GraphQL API

    注意第一步执行 vue create hello-world 时我们选择默认的 Vue2, Vue3 是 2020 年 09 月 18 日发布的,我在使用 Vue3 时后面生成样例代码那一步报错了,这里暂时用...使用 Vue Apollo Vue Apollo[2] 是一个三方库,可以让你在 Vue 的应用中使用 GraphQL,使用起来也很轻松,在上述 hello-world 目录下,也就是 package.json...生成样例代码后,我们先修改配置文件,将 graphql 的接口对接 Django 的 url。...由于搜索框有默认值 'Dairy' 因此显示时已经查询出了 Django 的数据。 改变搜索的菜谱分类名称,可以看到结果立刻显示: ?...到这里,我们已经实现了前端通过 GraphQL API 获取后端数据的过程。 其实,Vue Apollo 还有很多功能,比如上传文件。

    1.2K20

    GraphQL 从入门到实践

    GraphQL 的操作类型可以是 query、mutation 或 subscription,描述客户端希望进行什么样的操作 query 查询:获取数据,比如查找,CRUD 中的 R mutation...Query 开始查找,找到对象类型(Object Type)时则使用它的解析函数 Resolver 来获取内容,如果返回的是对象类型则继续使用解析函数获取内容,如果返回的是标量类型(Scalar Type...注意:在 Query 查询字段时,是并行执行的,而在 Mutation 变更的时候,是线性执行,一个接着一个,防止同时变更带来的竞态问题,比如说我们在一个请求中发送了两个 Mutation,那么前一个将始终在后一个之前执行...一些常用的解决方案如 Apollo 可以帮省略一些简单的解析函数,比如一个字段没有提供对应的解析函数时,会从上层返回对象中读取和返回与这个字段同名的属性。...---- 网上的帖子大多深浅不一,甚至有些前后矛盾,在下的文章都是学习过程中的总结,如果发现错误,欢迎留言指出~ 参考: GraphQL | 一种为你的 API 而生的查询语言 JSON-RPC

    2.5K31

    解读GraphQL|洞见

    (注:使用需要登录Github并授权) 1.需求驱动 我们可以先在GraphiQL里尝试在左边输入下面这段查询,按Ctrl Enter就可以在右边得到自己的名字和公司了: { viewer {...至于请求什么数据,数据怎么组织,全都是客户端说了算——这也是为什么要实现一个查询语言的原因:有了查询语言,你就可以精确描述你想要的了,移动端可能只获取文章标题,而Web端则希望可以预览部分内容。...Intellij IDEA还有一个非常完善的GraphQL插件,当你服务端Schema有Breaking Change时,客户端代码就会报错,有些编译插件也会产生编译时错误。...因此在使用GraphQL的过程中,我们要对安全问题更加重视。 3.需要重新思考Cache策略 REST虽然会引起一些性能问题,但它也以HTTP Cache的方式解决了很多性能问题。...其中一个是Meteor团队推出的Apollo Data,它提供了一系列的服务端以及客户端工具来简化GraphQL的开发,容易上手并且支持Android、IOS、React(Native)以及Angular2

    1.1K70

    来试试Graphql

    下面对比一下 RESTful api 和 GraphQL 的优缺点。 优点: 声明式的接口获取 RESTful api 返回的字段冗余, 当多个终端共用接口时,尤其明显。...操作类型( Operation type ) 查询( query ) 更新( mutation ) 订阅( subscription ) GraphQL 实战 我一直提倡,刚开始学习一门新的技术,别看太多文档...实际中的项目可能使用 egg 或者 koa 或者 express。...:查询中传入的参数 // context:这是特定查询中所有解析程序共享的对象,用于包含每个请求的状态,包括身份验证信息,数据加载器实例以及解析该查询时应考虑的任何其他内容 // info:此参数仅在高级情况下使用...已经成功找到对应 id 的数据了,但是这里的 id 是写死的,我们说 graphql 最大的好处是声明式获取,那如何把 id 变成一个变量,让外部传入? ?

    2K20

    【译】Graphql, gRPC和端对端类型检验

    使用apollo-client和react-apollo简化了前端代码对缓存和数据的管理。 灵活的查询方式方便我们在未来构建移动端以及内部应用。...为了保证GraphQL server和前端之间的类型安全,我们使用Apollo CLI的代码生成器:使用命令行来生成我们所有GraphQL查询的类型: React示例 在我们的应用中需要用到三种查询:...在此基础上,我们进一步使用apollo-typed-components来给每项操作生成react-apollo组件,也就是ApolloComps.tsx文件中的GetTodosQuery组件、CreateTodoMutation...在.tsx中,需要使用as操作符来重写这一表达式: const foo = bar as Foo 我们在ApolloComps.tsx文件中生成出来的Query/Mutation组件看起来像下面这样:...此外,由于实现了端对端的类型检验,很难出现数据的错误使用或是引入向前不兼容的变更。如果我们需要引入向前不兼容的变更,也很容易在发生变更之前决定我们系统中的哪些部分是需要进行修改的。

    3.1K20

    你还在用 REST API 吗?

    除此之外,它还允许我们将不同的实体组合到单个查询中。 GraphQL 的优势 检索精确的数据,无任何多余数据。在 GraphQL 中,可以得到我们所请求的内容,这是一个很大的优势。...在我们的例子中,我们必须显示该帖子的作者、帖子以及该用户的关注者。 如果使用 REST,我们至少要发出 2 到 3 个请求,类似于: /user/以获得用户(作者)的详细信息,比如名称。...例如,在第一个请求中,我们只需要名称,但是当我们使用这种方法时,我们将会获取该用户相关的所有详细信息。 此时就是 GraphQL 显示其强大功能的时候了。我们需要指定查询,然后才能获得所需的输出。...要使用 GraphQL 实现相同的效果,我们可以使用类似于这样的查询: query { User(id: '123') { name posts { title } followers { name }...但是,当使用 Apollo Client、Relay 等客户端时,它也能很容易处理错误。 结 论 与 REST 相比, GraphQL 当然更具优势,但它可能并不总是最佳实践。

    1.5K10

    《GraphQL 名词 101:解析 GraphQL 的查询语法》【译】

    这个请求体显示了GraphQL的主要构建块,它指定了你尝试获取的数据。 字段(Fields):客户端请求的数据单元,最后作为JSON响应数据中的一个字段。...但是在GraphQL操作中三种可选的部分都没有在上述栗子中使用。如果你不仅仅是用GraphQL执行查询操作,或是希望传递动态变量到GraphQL查询中,你就需要利用到这些新的GraphQL特性。...这样,无论你是在网络日志中或者GraphQL服务器上发现错误,你都可以通过名字很轻松的在代码库中定位问题,而不是靠猜测(类似的工具有 Apollo Optics)。...变量使用特定的序列化协议(在目前的 GraphQL 服务实现中,通常是使用JSON )通过查询文档独立传输。...如果你使用了正确的片段(fragments )名,在优化数据获取时,你能够很好的追踪你的代码。

    3K20

    TypeGraphQL的尝试

    前言 GraphQL 在我们之前的项目中的使用情况非常不错,后端可以只需要专注于合理的 Schema 设计与开发,并不需要太关心界面上的功能交互,在前端我们用 Apollo GraphQL 替代了 Redux...我们在准备使用 TypeScript 来写 GraphQL 的时候,我们会有面临一个最大的问题 GraphQL Schema Type DSL 和数据 Modal 需要写两份么?...@Resolver:来声明当前类是数据处理的 @Query:声明改方法是一个 Query 查询操作 @Mutation:声明改方法是一个 Mutation 修改操作 @FieldResovler:对 @...Resolver(of => Recipe) 返回的对象添加一个字段处理 方法参数: @Root:获取当前查询对象 @Ctx:获取当前上下文,这里可以拿到 egg 的 Context (见上面中间件集成中的处理...我们在正式使用中目前也没有遇到大的问题,该项目目前也比较活跃,很多新的特性也在开发中,建议可以做一些尝试。

    2.3K10

    面对极度复杂的前后端业务场景,使用 GraphQL 正确的姿势

    对于我们应用的订单页面数据,在Restuful场景下首先会根据订单ID请求订单信息,接着依据从订单信息中得到的产品ID获取产品详细数据,之后还需要根据创建人ID获取客户详细数据,最后将这些数据结合起来才能渲染页面...上图展示的是通过GraphQL来做订单页面时后端定义的一些类。最下方的员工类是一个基类,它包含了id、性别、部分、姓名这些通用的字段。...最后设备重启完成之后会再重新发布心跳包到MQTT来更新一系列的操作。 使用轮子过程中的注意事项 使用新轮子的问题(前端) 在使用新轮子的过程中碰到的第一个问题就是在学习成本和团队适应方面。...在使用Apollo的过程中我们也遇到了一些坑。...其次是开发feature时要更多考虑性能的问题,避免被查宕机。另外GraphQL相比Restful在鉴权模型设计上要投入更多的精力。 说完了这些弊端,再来看下有那些有利的地方。

    7.6K20

    30分钟理解GraphQL核心概念

    值得注意的是,GraphQL中可以通过Scalar声明一个新的标量,比如: prisma(一个使用GraphQL来抽象数据库操作的库)中,还有DateTime和ID这两个标量分别代表日期格式和主键 在使用...GraphQL实现文件上传接口时,需要声明一个Upload标量来代表要上传的文件 总之,我们只需要记住,标量是GraphQL类型系统中最小的颗粒,关于它在GraphQL解析查询结果时,我们还会再提及它。...我们按照字面意思来理解它们就好,如下: query(查询):当获取数据时,应当选取Query类型 mutation(更改):当尝试修改数据时,应当使用mutation类型 subscription(订阅...和comments id在Author类型中为标量类型,解析结束 author在Author类型中为对象类型User,尝试使用User的Resolver获取数据,当前field解析完毕 之后对第二层解析的返回值...同时,还需要了解一些额外的查询概念,比如分页查询中涉及的Connection、Edge等。 大概就这么多,如有错误,还望指正。

    2K40

    30分钟理解GraphQL核心概念

    值得注意的是,GraphQL中可以通过Scalar声明一个新的标量,比如: prisma(一个使用GraphQL来抽象数据库操作的库)中,还有DateTime和ID这两个标量分别代表日期格式和主键 在使用...GraphQL实现文件上传接口时,需要声明一个Upload标量来代表要上传的文件 总之,我们只需要记住,标量是GraphQL类型系统中最小的颗粒,关于它在GraphQL解析查询结果时,我们还会再提及它。...我们按照字面意思来理解它们就好,如下: query(查询):当获取数据时,应当选取Query类型 mutation(更改):当尝试修改数据时,应当使用mutation类型 subscription(订阅...,解析结束 author在Author类型中为对象类型User,尝试使用User的Resolver获取数据,当前field解析完毕 之后对第二层解析的返回值,进行第三层解析,当前author还包含一个Query...同时,还需要了解一些额外的查询概念,比如分页查询中涉及的Connection、Edge等。 大概就这么多,如有错误,还望指正。

    98620
    领券