GraphQL 优于 REST?

Posted

技术标签:

【中文标题】GraphQL 优于 REST?【英文标题】:GraphQL over REST? 【发布时间】:2020-01-10 08:46:05 【问题描述】:

我看到谷歌上有很多关于 GraphQL over REST 的辩论/讨论。但我的观点 - GraphQL 端点本身不是 Rest 端点和控制器吗? 这似乎可以从GraphQL tutorial video 给出的示例中得到验证(参见 23m 或 9.30m)。所以不是graphql 也通过 REST 服务?我看到这个例子中使用的动词是 POST(32:30 m) 而不是动词 Query 或 mutuation 。 QueryMutation 不是强制性的吗?

rest查询也需要是JSON字符串还是有自己的语法或者两者都支持?

【问题讨论】:

【参考方案1】:

GraphQL 规范只定义了一种查询语言来获取数据。它没有定义外部客户端如何通过 Internet 访问 GraphQL 服务。由服务器实现决定使用哪种协议。几乎所有服务器都会选择使用 HTTP。

所以最后,您仍然需要实现一个 HTTP 端点才能接收 GraphQL 查询。然后,该 HTTP 端点将接收到的 GraphQL 查询传递给 GraphQL 引擎以处理并将结果返回给客户端。该 youtube 视频中的作者只是展示了他选择使用 @RestController 来实现 GraphQL 端点。在 Java 世界中,如果您不想自己推出,可以简单地使用 this 和 this 作为 GraphQL 端点。

使用@RestController 实现 HTTP 端点并不意味着它是 REST 服务,如果您不基于 REST 原则实现它们。遵循同样的逻辑,使用@RestController 实现 GraphQL 端点并不意味着 GraphQL 是 REST 。此外,在 GraphQL 世界中,所有资源只有一个端点,这与 REST 完全不同,而每个资源都有自己的端点。

Query 或 Mutation 不是强制性的吗?

对于 Mutation ,单词 Mutation 是强制性的。如果没有 QueryMutation ,则将其视为Query

rest 查询也需要是 JSON 字符串,或者它有自己的语法,或者 两者都支持?

查询不是 JSON。它是 GraphQL 查询,语法在 GraphQL 规范中定义。

【讨论】:

您说The query is not a JSON .It is the GraphQL ... 但是在您提到的第二个链接中它说1. GET request with query, operationName and variables parameters. The variable parameters are json encoded 2. POST request with body application/json and keys query (string), 我不确定json 编码参数在GET 请求中的含义以及POST 请求中的正文应用程序/json 是什么?不是说json格式吗? 是的。 POST 请求是一个 JSON,其中包含字段 queryoperationNamevariables 。但query 字段的值不是 JSON,而是具有自己语法的 GraphQL 查询。我意识到您在询问查询字段的内容。例如,它可以是query employee id name 不确定I realise you are answer the content of this query field 是什么意思? 我有一个错字,我的意思是我认为你在问 POST 请求中 query 字段的内容是否是 JSON 字符串

以上是关于GraphQL 优于 REST?的主要内容,如果未能解决你的问题,请参考以下文章

REST 映射到 GraphQL

分分钟将 REST 转换为 GraphQL

使用 GraphQL 封装 REST API / 仅使用 GraphQL

GraphQL 或 REST [关闭]

GraphQL 是不是具有与 REST 相同的缓存能力

GraphQL vs REST API 架构,谁更胜一筹?