GraphQL是数据库技术吗?
不是。GraphQL经常与数据库技术混淆。这是一个误解,GraphQL是API的查询语言,而不是数据库。在这个意义上,它是数据库无关的,可以用于任何类型的数据库,甚至根本没有数据库。
GraphQL仅适用于React / Javascript开发人员?
GraphQL是一种API技术,因此可以在需要API的任何上下文中使用。
在后端,GraphQL服务器可以用任何可用于构建Web服务器的编程语言实现。在JavaScript之外,Ruby,Python,Scala,Java,Clojure,Go和.NET都有流行的实现可以参考。
由于GraphQL API通常通过HTTP进行操作,任何可以发起HTTP请求的客户端都可以从GraphQL服务器查询数据。
注意:GraphQL实际上是传输层不可知的,所以您可以选择其他协议,比HTTP来实现您的服务器。
如何做服务器端缓存?
GraphQL的一个常见问题,特别是与REST进行比较时,难以维护服务器端缓存。使用REST,可以轻松地为每个端点缓存数据,因为它确保数据的结构不会改变。
另一方面,使用GraphQL,客户端下一步要求什么不清楚,所以将缓存层放在API的后面并没有什么意义。
服务器端缓存仍然是GraphQL的挑战。有关缓存的更多信息可以在GraphQL网站上找到。
如何进行身份验证和授权?
认证和授权往往是混淆的。身份验证描述了声明身份的过程。这是当您使用用户名和密码登录服务时,您进行身份验证。另一方面,授权描述了指定个别用户和用户组对系统某些部分的访问权限的权限规则。
GraphQL中的身份验证可以使用诸如OAuth的常用模式来实现。
为了实现授权,建议将任何数据访问逻辑委派给业务逻辑层,而不是直接在GraphQL实现中处理它。如果您想要了解如何实施授权的灵感,可以查看Graphcool的权限查询。
如何处理错误?
一个成功的GraphQL查询应该返回一个名为“data”
的根字段的JSON对象。如果请求失败或部分失败(例如因为请求数据的用户没有正确的访问权限),则将一个称为“errors”
的第二根字段添加到响应中:
{
"data": { ... },
"errors": [ ... ]
}
有关更多详细信息,可参考GraphQL规范。
GraphQL是否支持脱机使用?
GraphQL是(web)API的查询语言,在这个意义上,只能在线工作。 但是,客户端的脱机支持是一个有意义的问题。 Relay和Apollo的缓存能力对于一些用例可能已经足够了,但目前,还没有一个流行的解决方案来存储数据。你可以在Relay和Apollo的GitHub问题中获得更多见解,其中讨论了关于脱机的支持。
离线使用和持久性的一个有趣的方法可以在这里找到。