至此,我再也无法回过头来享受使用 REST 的工作了。 REST 有什么问题吗? 每个 REST API 都是独特的 公平地说,REST 甚至不是一个标准。...在一个有经验的团队中,你可以避免这些问题,但是你难道不希望一些问题已经在软件方面得到解决吗?...你需要同时在服务器和客户端上实现每个端点 还有大量的库可以在 ORM 或直接数据库自省的帮助下自动生成 REST 端点。即使使用了这样的库,它们通常也不是很灵活或可扩展的。...类型可以是非可选的,例如String!字段不能有空值,而String可以。字段也可以有命名参数,所以TodoList!...由于 Apollo 客户端库架构简单,我能够将一个使用 React.js 与 Redux 的应用慢慢过渡到 React Apollo,一个组件一个组件的,只在有意义的时候才这样做。
我们开发 API 的方式必须随着时间的推移而发展,以便我们始终可以开发良好、直观且设计良好的API。 在过去几年中,GraphQL 在越来越受到开发者的欢迎。...版本控制 在我看来,REST 中的一个痛点就是版本控制。使用 REST API,通常会看到许多带有 v1 或 v2 的 API。...这些在 GraphQL 中并不需要,因为你可以通过添加或删除类型来改进 API。 在GraphQL中,你所需要做的就是写新代码。可以编写新类型、查询和修改,而无需维护其他版本的API。...基本上它是 REST 的替代品,做了很多改进。 使用 GraphQL,我们可以获得许多新功能,在构建 API 时为你提供强大的功能。下面让我们一个一个地审视它们: 单端点 根本没有必要构建很多端点!...看起来很神奇,但这就是 GraphQL! 使用 GraphQL,你只能获取所需的数据 没有过度获取或未被充分利用的信息,你只获取自己需的数据。还记得我们最初讨论的性能问题吗?
也许修改下流程或团队结构会有所帮助?GraphQL 完全不能解决版本控制问题。相反,我认为它实际上使情况变得更糟。 你必须支持移动应用程序吗?你应该意识到,发布原生应用需要时间。...如果是这种情况,GraphQL 的弃用模型对你一点帮助都没有。 使用 REST,你可以创建一个新端点或现有端点的另一个版本。问题是一样的,只是解决方案看起来有一点不同。...如果我们不那样做,那就是人的问题,而不是技术的问题。 5 提高客户端性能 接下来的一段很短,是关于 GraphQL 如何提高客户端性能和减少网络往返。...他总结说,因为我们只使用了一个 GraphQL 服务器,所以没有这个问题。 我很抱歉,但是我又一次得出了一个完全不同的结论。如果将规则设置为不允许版本控制,则可以添加新的端点或替换现有端点的实现。...使用 GraphQL,解析部分数据的逻辑位于服务器中。客户端需要有额外的逻辑对部分响应做相应的处理。 使用 REST,获取部分数据的逻辑位于客户端或 BFF 中。
我用动图来分别演示下REST和GraphQL是怎么样的一个过程。...了解清楚后我全面拥抱GraphQL GraphQL执行逻辑 有人会问: 使用了GraphQL就要完全抛弃REST了吗? GraphQL需要直接对接数据库吗?...GraphQL应用的基本架构 下图是一个 GraphQL 应用的基本架构,其中客户端只和 GraphQL 层进行 API 交互,而 GraphQL 层再往后接入各种数据源。...Tipe (github): 一个 SaaS(软件即服务)内容管理系统,允许你使用强大的编辑工具创建你 的内容,并通过 GraphQL 或 REST API 从任何地方访问它。...你会在你下一个项目中引入Graphql并使用它吗? 你对Graphql还有什么疑惑的问题呢?
我用动图来分别演示下REST和GraphQL是怎么样的一个过程。...了解清楚后我全面拥抱GraphQL GraphQL执行逻辑 有人会问: 使用了GraphQL就要完全抛弃REST了吗? GraphQL需要直接对接数据库吗?...使用GraphQL需要对现有的后端服务进行大刀阔斧的修改吗? 答案是:NO!不需要!...GraphQL应用的基本架构 下图是一个 GraphQL 应用的基本架构,其中客户端只和 GraphQL 层进行 API 交互,而 GraphQL 层再往后接入各种数据源。...Tipe (github): 一个 SaaS(软件即服务)内容管理系统,允许你使用强大的编辑工具创建你 的内容,并通过 GraphQL 或 REST API 从任何地方访问它。
作者 | Khalil Stemmler 策划 | 田晓旭 在服务器上使用 GraphQL 代替 REST 是有很多好处的,使用 Apollo Client 取代自己编写的数据获取逻辑也有很多优势。...对于突变,解析器可以简单地将控制权传递给一个应用层用例。 将用例作为应用程序的重心后,从 REST 切换到 GraphQL(或同时支持两者)变得轻而易举。...由于具备执行自省查询的能力,所以 GraphQL Playground 的 GraphQL 资源管理器可以显示 GraphQL 端点的所有功能 在 REST 领域中,我只看到了使用 Swagger 构建的...团队是碎片化的吗?前端开发人员是只做前端开发,还是允许他们完成技术栈另一端的工作? 你的后端开发人员是否在远程工作? 你的后端开发人员在办公室工作吗?...前端开发人员可以使用数据图来创建自己的数据获取用例,而不必依赖后端开发人员。 GraphQL 消除了管理 API 版本的需要,Apollo 的 GraphManager 可以简化生产模式验证。
问题: 我在职业生涯中使用过很多 OData,现在我来自不同团队的同事中很少有人建议我们迁移到 JsonAPI 和 GraphQL,因为它与 Microsoft 无关。...我对这两种查询语言都没有太多经验。据我所知,OData 是 Salesforce、IBM、Microsoft 使用的标准,并且非常成熟。为什么要切换到 JsonAPI 和/或 GraphQL?...有真正的好处吗?JsonAPI 和 GraphQL 是新标准吗?根据受欢迎程度更改公共 api 实现似乎没有用,尤其是在没有太大好处的情况下。 有人可以启发我吗?...与 GraphQL 类似的是 Falcor,它也相对较新。 虽然 GraphQL 使用 HTTP,但它不被视为 REST,而是 REST 的替代品。...例如,您的 API 可以遵循上述标准之一(不包括 GraphQL),也可以使用 OpenAPI 3 进行记录。
我用动图来分别演示下REST和GraphQL是怎么样的一个过程。...GraphQL需要直接对接数据库吗? 用GraphQL需要对现有的后端服务进行大刀阔斧的修改吗? 答案是:NO!不需要!...新的开发需求可以直接就使用GraphQL服务来获取数据了,以前已经上线的功能无需改动,还是使用原有请求调用REST接口的方式,最低程度的降低更换GraphQL带来的技术成本问题!...GraphQL应用的基本架构 下图是一个 GraphQL 应用的基本架构,其中客户端只和 GraphQL 层进行 API 交互,而 GraphQL 层再往后接入各种数据源。...Tipe (github): 一个 SaaS(软件即服务)内容管理系统,允许你使用强大的编辑工具创建你 的内容,并通过 GraphQL 或 REST API 从任何地方访问它。
GraphQL是一种API数据查询语言,很多大公司都用GraphQL API代替了 REST API。...该请求本身没有多大问题,但其中出现的id变量确实让我有了兴趣,这里的id是以string而并非整数被发送传输的,当时我就想,这个id号能否用来对目标网站内部某个API执行ssrf请求呢?...目标网站使用REST和GraphQL方式来获取、更改和删除用户数据,而GraphQL有点类似REST API的代理,其可以向服务端不同的REST端点发起ssrf请求,以获取或更改相关数据,就比如以下GraphQL...我写了一个python脚本,创建了一个HTTP Server,把所有对http://169.254.169.254的入站请求都跳转到了我自架的ngrok服务中,另外一个原因是目标网站只支持https,用...还记得上面那个SSRF请求吗,我ngrok服务端收到的ssrf请求如下: 其中的cookie头就是用户会话信息,因此可以通过用XSS方式来利用这个cookie信息。
GraphQL 是一个未接触的东东,有博主认为它可以代替 Rest API。那么真的可以代替吗?...---- 一、Rest API 自从它的出现,我的所有应用都采用了 Rest API 的方式进行开发(除了 webservice )。 Rest API 轻量:基于 HTTP 协议。...众所周知,Rest API 是一套标准、规范,并不是一个完整的语言。而 GraphQL 居然是一套语言 ,基于查询的编程语言!...可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。 当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件: 1....当时,我是持反对意见来看待 GraphQL 可以替代 Rest API,通过了解、学习 GraphQL,最终觉得 GraphQL 似乎还蛮有意思来着。
例如,我们可以创建一个查询,Articles只获取我们想要的字段,无论是否嵌套Comments。...反过来,这意味着 GraphQL 本质上是自记录的。一旦字段、类型或查询发生更改,基于架构的文档可以自动更新。 没有版本控制的 API 每次应用更改时,API 可能也需要更改。...REST 通过提供多个版本来处理这个问题,这对于 API 开发人员来说是很麻烦的。 使用 GraphQL,可以从模式中删除不推荐使用的字段,而不会影响现有查询。...REST 客户端受益于 HTTP 缓存,因为所有端点都是 URL,而 GraphQL 客户端需要实现自己的自定义解决方案。...GraphQL 通过提供严格类型化的模式语言来解决这些问题,接口调用者可以根据自己的需要进行查询。 如果未来能有更好的设计将两者的优点结合,我相信会是最佳的解决方案。
或生成的接口文档来进行自己期望的请求。...GraphQL 的使用趋势 一些比较有名的公司正在转换 REST API 到 GraphQL,比如 Twitter、IBM、Coursera、Airbnb、Facebook、Github、携程等,特别是...Github,它的 v4 版外部 API 只使用 GraphQL。...GraphQL 的局限性 对于简单的应用程序而言,设置类型、查询等可能会有些复杂,相比之下 REST 可以更轻松完成。...最后的话 GraphQL 已经被各种体量的团队所使用,在不同的环境、不同的语言下,用于增强移动应用、网站和 API。如果你已经厌倦了 REST API,现在是时候学习一下 GraphQL 了。
作者 | Harsha Vardhan 译者 | 刘雅梦 策划 | 田晓旭 通过 HTTP 发送数据,许多开发人员已经在用 REST 了,而 GraphQL 通常被认为是一种代替遗留 REST API...GraphQL 的劣势 对于简单的应用程序来说,设置类型、查询等可能有点 复杂,因为使用 REST 可以很容易地完成。 它使用的是 单个端点,而不是遵循 HTTP 规范进行缓存。...简洁明了,不是吗? GraphQL vs REST 总结一下,两者主要有如下几个明显的差异: 数据抓取 REST 会导致抓取过度或抓取不足,而 GraphQL 则不会这样。...自动缓存 REST 能自动生效缓存,而 GraphQL 则没有自动缓存系统,但是可以借助 Apollo Client、Relay 等客户端实现缓存。...如果大家想分享自己关于 GraphQL 或 REST 的经验,请在评论区留言,感谢您的阅读!
我不是在说 GraphQL 会“杀死” REST 或别的类似的东西。REST 可能永远不会消失,就像 XML 从没消失过一样。...使用 GraphQL 的客户端程序可以通过其功能查询该模式。这种方法使得客户端与服务端解耦,并允许其两者独立开发和扩展。 GraphQL 请求可以是查询(读取操作)或突变(写入操作)。...GraphQL 是此种通信方式的中介。 ? 截图来源于我的 Pluralsight 课程 - 使用 GraphQL 构建可扩展的 API。 你可能会问,为什么客户端不直接与服务器通信呢? 当然可以。...如果我们试图保护的 GraphQL API 端点并不公开,而是为了供我们自己的客户端(网络或移动设备)内部使用,那么我们可以使用白名单方法和预先批准服务器可以执行的查询。...客户端可以要求服务器只执行使用查询唯一标识符预先批准的查询。据说 Facebook 采用的就是这种方法。 认证和授权是在使用 GraphQL 时需要考虑的其他问题。
RestFUL, Not REST 通常情况下,完全休息和使用超媒体并不常见。然而,使用RESTful服务可以帮助我考虑我的消费者将如何使用我的API。...即使链接没有拼写出来,我也经常从入口点出发,通过连接的资源链来理解我的消费者可能如何使用我的API。这可以帮助我找到丢失的资源或没有意义的资源。 4....RESTful 有助于填补这些空白 一旦我有了资源,我发现浏览一下主要的方法很有帮助:GET、POST、PUT、PATCH和DELETE。这让我看到资源是否为只读的。我可以编辑现有的还是只创建新的?...消费者应该能够移除它吗?这些是我经常使用的问题。 5. 想想以前那些使用返回错误状态码的API 我发现查看HTTP状态代码对了解在资源上操作时会发生什么很有用。无法找到资源吗?...我如何知道是消费者犯了错误(4xx)而不是服务器(5xx)?这个资源(409)可能存在并发问题吗?我把状态代码列表当作一个指南,引发诸如此类的问题,并引导我的思想走向一个健壮的API。 6.
我曾经工作过的某公司想要将某业务的售卖相关功能给公司其他业务使用,但是接入方一看那么多接口,瞬间就决定不接了,逼不得已该业务平台紧急开发了 BFF 相关功能让其他业务方接入。...我在京东 APP 上随便截图了一个商品 类似这个页面,当用户打开这个页面的时候,按照目前比较流行的 REST 接口,需要 APP 至少发起下面这些请求: 获取商品详情接口 获取商品价格、优惠相关的接口...由于当时产品的理念认为强制升级是不优美的,不符合产品设计美学,导致这款产品是没有强制升级功能的,于是导致的结果是 v1 到 v12 的接口总是有用户在使用的。...就在我们被无法下线的 API 接口折磨的时候,经过调研之后发现 GraphQL 正好有一个功能,“API 演进无需划分版本”,这不是瞌睡来了就有枕头吗,于是在技术负责人带领下(GraphQL 改造项目还没上线...所以 GraphQL 限流的难题就在于客户端只发起一次请求,但是在服务器端可能被放大无数倍。
后端和前端之间经常存在大量摩擦,而 GraphQL 可以轻松解决这些摩擦。...除非 AI 可以使用 REST 自行编写后端到前端的蔓延(可以吗?),如果我们想要减少样板代码并在所有界面中更快地交付功能,我们将需要一个更好的解决方案。...只需使用 内省 即可查看可用的数据,描述应用程序所需的数据,然后就可以开始竞赛了。 减少技术债务:你知道什么比为单个界面编写后端到前端花费更多时间吗?编写 50 个后端到前端。...抽象现有的 API 复杂性:GraphQL 通常被视为 REST 的替代品。但 GraphQL 可以愉快地从其他 REST 端点获取数据。它提供了一个定制构建的抽象层,以帮助团队更快地交付功能。...后端和前端之间通常存在很多摩擦,您可以使用 GraphQL 轻松解决这些摩擦。
我还记得当 Facebook 首次推出 GraphQL 时,我们团队都兴奋不已——我们当即意识到 GraphQL 可以解决我们的很多问题,让我们可以在单次的请求中获取所有数据,并为我们的 API 提供结构化文档...为此,我们需要自动且准确地构建我们的 GraphQL 层,以正确反映当前运行在我们的架构中的业务资源,而不是我们之前做的那样。...接下来,我们利用之前解析器的大部分逻辑,简单地定义了 GraphQL 查询和 REST 请求之间的转换,并且能够生成一个功能完善的 GraphQL 服务器,时间不超过五分钟。...这样并没有将我们的资源真正地链接在一起,我们仍然会使用尽可能多的 GraphQL 查询来获取数据,就像使用 REST API 一样。...尽管我们的前端开发人员不得不学习如何使用 GraphQL,但我们不需要重写任何后端 API 或运行复杂的迁移流程才能使用 GraphQL——开发人员创建新的项目可以直接使用。
REST(Representational State Transfer): REST是一种基于资源的状态转移的架构风格,旨在通过操作资源的表现层(通常是JSON或XML格式)来进行通信。...GraphQL: GraphQL是一种由Facebook开发的查询语言和运行时系统,旨在提供对客户端的更灵活和高效的数据查询和操纵能力。与REST不同,GraphQL使用单一端点和单一POST请求。...版本控制: 通常使用URL版本或请求标头进行版本控制。 GraphQL: 架构风格: 查询语言和运行时系统。 端点(Endpoint): 单一端点,使用单一POST请求。...数据传输: 只获取客户端请求的数据,减少了不必要的数据传输。 请求粒度: 由客户端定义,避免了不必要的多余数据。 版本控制: 可以避免版本控制问题,客户端可以精确指定所需字段。...结论: 选择REST还是GraphQL取决于项目的具体需求和复杂性。REST在简单的场景中表现出色,而GraphQL更适用于需要更大灵活性和精确数据控制的复杂应用程序。
领取专属 10元无门槛券
手把手带您无忧上云