rest - GraphQL 优于 REST?
问题描述
我在 google 上看到了很多关于 GraphQL over REST 的辩论/讨论。但我的观点 - GraphQL 端点本身不是 Rest 端点和控制器吗?这似乎可以从这个GraphQL 教程视频中给出的示例中得到验证(参见 23m 或 9.30m)。那么 graphql 不是也通过 REST 提供服务吗?我看到这个例子中使用的动词是 POST(32:30 m) 而不是动词 Query 或 mutuation 。是强制性的Query
还是Mutation
不是强制性的?
其余查询是否需要是 JSON 字符串,或者它有自己的语法,或者两者都支持?
解决方案
GraphQL 规范只定义了一种查询语言来获取数据。它没有定义外部客户端如何通过 Internet 访问 GraphQL 服务。由服务器实现来决定使用哪种协议。几乎所有服务器都会简单地选择使用 HTTP。
所以最后,你仍然需要实现一个 HTTP 端点才能接收 GraphQL 查询。然后,该 HTTP 端点将接收到的 GraphQL 查询传递给 GraphQL 引擎以处理并将结果返回给客户端。该 youtube 视频中的作者只是展示了他选择使用@RestController
. 在 Java 世界中,如果您不想自己推出,可以简单地将this和this用于 GraphQL 端点。
如果您不基于 REST 原则实现 HTTP 端点,使用@RestController
并不意味着它是 REST 服务。遵循同样的逻辑,@RestController
用于实现 GraphQL 端点并不意味着 GraphQL 是 REST 。此外,在 GraphQL 世界中,所有资源只有一个端点,这与 REST 完全不同,而每个资源都有自己的端点。
查询或突变不是强制性的吗?
对于 Mutation ,这个词Mutation
是强制性的。如果没有Query
or Mutation
,则将其视为Query
。
其余查询是否需要是 JSON 字符串,或者它有自己的语法,或者两者都支持?
该查询不是 JSON。它是 GraphQL 查询,其语法在 GraphQL 规范中定义。
推荐阅读
- ios - 在 Firebase 数据库中的 MKMapView 上放置多个标记
- c# - 无法启动服务挂载被拒绝 '/usr/local/share/dotnet/sdk/NuGetFallbackFolder\r\n' 不是来自 macOS X 的共享并且 docker 不知道
- input - 如何阻止在输入标签上输入“qq.com”?
- python - Codechef 上的错误答案
- c# - 如何在应用程序内关闭时重新启动应用程序
- google-sheets - 如何使用列作为标识符
- python - pycharm可以通过ssh连接wsl但不能在wsl中使用python
- javascript - 仅在没有 jQuery 的情况下完成 first 后调用语句
- python - AttributeError:模块“h5py.tests.old”没有属性“模块”
- java - 插入到具有未定义列数的mysql