GraphQL

GraphQL是一个开源的,面向API而创造出来的数据查询操作语言以及相应的运行环境。[1] 于2012年仍处于Facebook内部开发阶段,直到2015年才公开发布。 2018年11月7日,Facebook将GraphQL项目转移到新成立的GraphQL基金会(隶属于非营利性的Linux基金会)。[2][3]

GraphQL
開發者Facebook及社区
首次发布2015年9月14日 (2015-09-14)
源代码库github.com/facebook/graphql
编程语言JavaScriptRubyScala和其他各种语言中实现。
操作系统跨平台
网站graphql.org

GraphQL相较于REST以及其他web service架构提供了一种更加高效、强大和灵活的开发web APIs的方式。它通过由客户端根据所需定义数据结构,同时由服务端负责返回相同数据结构的对应数据的方式避免了服务端大量冗余数据的返回,但与此同时也意味着这种方式不能有效利用起查询结果的web缓存。GraphQL这种查询语言所带来的灵活性和丰富性的同时也增加了复杂性,导致简单的APIs有可能并不适合这种方式。[4][5][6]

GraphQL支持数据读取、写入(操作)和数据变更订阅(实时更新)。[7]

主要的GraphQL客户端有Apollo Client[8] 和 Relay.[9] GraphQL的服务端在多个语言都有实现包括Haskell, JavaScript, Python,[10] Ruby, Java, C#, Scala, Go, Elixir,[11] 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
            }
        ]
    }
}

参见

  • Query by Example

参考文献

  1. . [2018-11-08]. (原始内容存档于2016-04-26).
  2. . TechCrunch. [2018-11-07]. (原始内容存档于2019-01-22) (美国英语).
  3. . The Linux Foundation. 2018-11-06 [2018-11-07]. (原始内容存档于2019-01-28) (美国英语).
  4. . Phil Sturgeon. [2018-11-25]. (原始内容存档于2019-04-08) (英国英语).
  5. . Honest Engineering. 2018-08-04 [2018-11-26]. (原始内容存档于2018-11-26) (美国英语).
  6. . Howto GraphQL. [2018-07-04]. (原始内容存档于2018-07-05).
  7. . facebook.github.io. Facebook. [2018-07-04]. (原始内容存档于2018-07-18).
  8. . [2019-01-24]. (原始内容存档于2018-07-20).
  9. . [2019-01-24]. (原始内容存档于2019-01-29).
  10. . graphene-python.org. [2017-06-18]. (原始内容存档于2015-10-12).
  11. . [2018-07-19]. (原始内容存档于2018-07-06).

外部链接

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.