GraphQL
外观

编程语言 | 在 JavaScript、Ruby、Scala和其他各种语言中实现。 |
---|---|
操作系统 | 跨平台 |
许可协议 | |
网站 | graphql |
GraphQL是一个开源的,面向API而创造出来的数据查询操作语言以及相应的运行环境。[2] 于2012年仍处于Facebook内部开发阶段,直到2015年才公开发布。 2018年11月7日,Facebook将GraphQL项目转移到新成立的GraphQL基金会(隶属于非营利性的Linux基金会)。[3][4]
GraphQL相较于REST以及其他web service架构提供了一种更加高效、强大和灵活的开发web APIs的方式。它通过由客户端根据所需定义数据结构,同时由服务端负责返回相同数据结构的对应数据的方式避免了服务端大量冗余数据的返回,但与此同时也意味着这种方式不能有效利用起查询结果的web缓存。GraphQL这种查询语言所带来的灵活性和丰富性的同时也增加了复杂性,导致简单的APIs有可能并不适合这种方式。[5][6][7]
GraphQL支持数据读取、写入(操作)和数据变更订阅(实时更新)。[8]
主要的GraphQL客户端有Apollo Client[9] 和 Relay.[10] GraphQL的服务端在多个语言都有实现包括Haskell, JavaScript, Python,[11] Ruby, Java, C#, Scala, Go, Elixir,[12] Erlang, PHP, R,和 Clojure.
2018年2月9日GraphQL的部分模式定义语言(SDL)规范制定完成。
例子
[编辑]POST请求:
{
orders {
id
productsList {
product {
name
price
}
quantity
}
totalAmount
}
}
响应:
{
"data": {
"orders": [
{
"id": 1,
"productsList": [
{
"product": {
"name": "orange",
"price": 1.5
},
"quantity": 100
}
],
"totalAmount": 150
}
]
}
}
参见
[编辑]参考文献
[编辑]- ^ 存档于2020-10-16).
- ^ GraphQL: A query language for APIs.. [2018-11-08]. (原始内容存档于2016-04-26).
- ^ 存档于2019-01-22) (美国英语).
- ^ 原始内容存档于2019-01-28) (美国英语).
- ^ 原始内容存档于2019-04-08) (英国英语).
- ^ 原始内容存档于2018-11-26) (美国英语).
- ^ 原始内容存档于2018-07-05).
- ^ 原始内容存档于2018-07-18).
- ^ 原始内容存档于2018-07-20).
- ^ 原始内容存档于2019-01-29).
- ^ 原始内容存档于2015-10-12).
- ^ Absinthe: The GraphQL toolkit for Elixir. [2018-07-19]. (原始内容存档于2018-07-06).