您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    GraphQL vs REST API 架构,谁更胜一筹?(2)
    时间:2020-03-05 12:19 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    可执行文件包含要处置的能够的操作列表,其中包括操作类型(查询、修正或订阅)、操作称号、要查询或写入的字段和一个选择集,该选择集准确定义了将从操作前往的数据。选择集是 GraphQL 的最大价值所在——它们允许客户端查询特定的数据集并接纳包含所央求信息的照应:不多不少。

    GET /graphql?query={ books(id:12) { authors { firstName, lastName } title, yearPublished, length }  

     

    {  

     

      Query {                 //  operation type 

     

      books (id:12) {         //  operation endpoint 

     

         authors {            //  requested fields 

     

            firstName 

     

            lastName 

     

         }  

     

         title 

     

         yearPublished     

     

        } 

     

      } 

     

    有关 GraphQL 标准的结构和语法的更多信息,请参阅 GraphQL 的文档。(https://graphql.github.io/graphql-spec/June2018/#sec-Overview)

    接上去,我们将看下 GraphQL 中查询的结构。

    6 GraphQL 查询解析

    下面是一个结构化的 GraphQL 查询,用于获取特定书籍的数据,包括作者的姓和名

    GET /graphql?query={ books(id:12) { authors { firstName, lastName } title, yearPublished, length } 

     

     

    Query {                 //  operation type 

     

    books (id:12) {         //  operation endpoint 

     

    authors {            //  requested fields 

     

    firstName 

     

    lastName 

     

     

    title 

     

    yearPublished 

     

     

     

    这一切都可以经过一个查询由 GraphQL 效劳器逻辑解析和处置完成。当把它与 REST 架构中相反结构的央求停止比较时,GraphQL 的优势就末尾显现出来了。

    让我们看看下面的 REST 央求结构,然后重点讨论其中的一些差异!

    7 REST 央求解析

    要向 REST API 收回相反的央求,客户端首先需求向可以前往图书数据的端点发送一个央求,并将图书 id 作为参数传入:

    GET /books/12 

    这个央求能够会前往一个包含特定图书一切数据的对象,例如:

    {  

    "title" : "The Hitchhiker's Guide to the Galaxy"

     

    "authorID"42

     

    "yearPublished" : 1978

     

    "length"208

     

    "genre""Science Fiction" 

     

    在我 们的例子里,与相反的 GraphQL 查询相比,该照应有两个缺陷:

    REST 照应包含相似 genre 这样的额外数据,前往的信息超出了我们的需求。

    REST 需求再发送一个央求来取得我们实践上正在查找的数据:这个特定作者的一切书籍。

    为了取得这些数据,我们需求运用我们的 authorID 收回一个额外的央求:

    GET /authors/42 

    这个央求的照应应该包含我们正在查找的一切数据:

    {   

    "firstName""Douglas",   

    "lastName""Adams" 

    (责任编辑:admin)