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