【问题标题】:GraphQL over REST?GraphQL 优于 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字符串还是有自己的语法或者两者都支持?

【问题讨论】:

    标签: rest web-applications graphql


    【解决方案1】:

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

    所以最后,您仍然需要实现一个 HTTP 端点才能接收 GraphQL 查询。然后,该 HTTP 端点将接收到的 GraphQL 查询传递给 GraphQL 引擎以处理并将结果返回给客户端。该 youtube 视频中的作者只是展示了他选择使用 @RestController 来实现 GraphQL 端点。在 Java 世界中,如果您不想自己推出,可以简单地使用 thisthis 作为 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 字符串
    猜你喜欢
    • 2021-11-23
    • 2017-04-29
    • 2018-09-10
    • 2021-09-17
    • 1970-01-01
    • 2019-11-06
    • 2017-12-11
    • 2020-01-21
    相关资源
    最近更新 更多