美文网首页程序员
GraphQL 从入门到放弃系列

GraphQL 从入门到放弃系列

作者: 豆志昂扬 | 来源:发表于2019-01-06 13:03 被阅读44次

使用 GraphQL,你可以将你所有的业务建模为图。
中文官网:http://graphql.cn/

REST是一种古老的面向服务端和客户端的架构风格。它定义了一系列严格的构建API的原则,用简单的方式描述资源,并认为大部分时候违背这些原则会让软件的扩展性受限。随着服务端SOA和客户端Ajax的崛起,通信扩展问题变得越来越重要,REST得以广泛被运用。

在MicroService逐渐流行的今天,RESTful API已经成为主流。不过随着前端和移动端的迅猛发展,REST也面临严峻挑战。

REST API存在问题:

  1. 资源分类导致性能受限。前端的效率主要来源于http请求

  2. 在现代场景中难于维护。虽然REST的目标是易于维护和扩展,但在Web前端/客户端领域,它的表现并没有想象得那么好。我们经常说最明显的Code smell就是重复。

  3. 缺乏约束。对REST来说,不同版本之间的兼容能力非常弱小。

  4. 严格,抽象,但并不能解决客户端问题。我们经常可以在网上看到互相指责的文章和讨论,基本上都是一方列举出自己使用RESTful API遇到的实际问题,而另一方认为前者实际应用违反了哪条REST原则,因此不是RESTful API。

GraphQL是什么?

image

GraphQL是一个查询语言,由Facebook开发,用于替换RESTful API。服务端可以用任何的语言实现。

GraphQL优势:

  1. 需求驱动。可以减少了沟通成本。

  2. 一次请求复杂数据。

  3. 静态类型。

  4. 兼容多版本。

GraphQL也存在一些潜在的问题,如安全问题,需要重新思考Cache策略等。

那么 GraphQL 与 RESTful 的具体区别有什么呢?我觉得主要是两点。

  • 入口 (entry point)

RESTful 的核心理念在于资源 (resource),且讲究一个 RESTful 接口仅操作单一资源;因此在你使用 RESTful 时,会设计出大量的接口。

GraphQL 是单一入口,一般配置在 [host]/graphql/,所有的资源都从该入口通过 GraphQL 的语句获取或修改(当然 GraphQL 亦支持多入口,但显然多入口的数量也远小于 RESTful)。

  • 所见即所得

查询的返回结果就是输入的查询结构的精确映射

查询:

{

hero {
name
}
}

返回:

{

"data": {
"hero": {
"name": "R2-D2"
}
}
}

  • 减少网络请求次数

如果设计的数据结构是从属的,直接就能在查询语句中指定。

{
hero (id: "10"){
name
# 查询可以有备注!
friends {
name
}
}
}

查询结果:

{
"data": {
"hero": {
"name": "R2-D2",
"friends": [
{
"name": "Luke Skywalker"
},
{
"name": "Han Solo"
},
{
"name": "Leia Organa"
}
]
}
}

}

即使数据结构是独立的,也可以在查询语句中指定上下文,只需要一次网络请求,就能获得资源和子资源的数据。

query {
hero {
name
}
droid(id: "2000") {
name
}
}

4 代码即文档

GraphQL会把schema定义和相关的注释生成可视化的文档,从而使得代码的变更,直接就反映到最新的文档上,避免RESTful中手工维护可能会造成代码、文档不一致的问题

5 参数类型强校验

RESTful方案本身没有对参数的类型做规定,往往都需要自行实现参数的校验机制,以确保安全。

但GraphQL提供了强类型的schema机制,从而天然确保了参数类型的合法性。

获取更多内容请关注微信公众号豆志昂扬:

  • 直接添加公众号豆志昂扬
  • 微信扫描下图二维码;

相关文章

  • GraphQL 从入门到放弃系列

    使用 GraphQL,你可以将你所有的业务建模为图。中文官网:http://graphql.cn/ REST是一种...

  • GraphQL从入门到放弃

    原文地址:https://xeblog.cn/articles/6 简介 千言万语汇成一句话:我的未来式由我做主。...

  • GraphQL从入门到实践

    GraphQL是一种新的Api请求规范,它可以让客户端在请求中指定希望得到的数据,而不像REST那样只能在服务端进...

  • 区块链从入门到放弃(区块链入门汇总整理)

    [区块链技术] 吐血推荐!区块链从入门到放弃(区块链入门汇总整理) 系列教程: https://learnblo...

  • 爬虫大神集锦

    python爬虫从入门到放弃系列:http://www.cnblogs.com/zhaof/tag/%E7%88%...

  • GraphQL Java从入门到实践

    源码解析 GraphQL Java 从Schema文件到GraphQL实例GraphQL Java 一次完整的执行...

  • 创造的乐趣

    从入门到放弃 ██████████████████████████████████████████████████...

  • PRISMA快速入门之Node.js

    本文属使用Prisma构建GraphQL服务系列。 可以参见PRISMA快速入门之Typescript,大致相同。...

  • 代码审计从入门到放弃(三) & phplimit

    前言 接着前面的代码审计从入门到放弃(一) & function、代码审计从入门到放弃(二) & pcrewaf ...

  • open基础笔记

    1,OpenGL从入门到放弃01》一些基本概念 2,《OpenGL从入门到放弃02 》GLSurfaceView和...

网友评论

    本文标题:GraphQL 从入门到放弃系列

    本文链接:https://www.haomeiwen.com/subject/puksrqtx.html