V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
ns2250225
V2EX  ›  分享创造

django 使用 graphQL 详解

  •  
  •   ns2250225 ·
    ns2250225 · 2018-02-22 18:32:48 +08:00 · 3879 次点击
    这是一个创建于 2467 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Github

    Blog

    为什么不用 REST

    • Rest 一次只能请求一个资源,会造成太多的 http 请求
    • Rest 的版本控制问题是一个痛

    GraphQL 的关键语句

    • query:查询,相当于 GET
    • mutation:变化,相当于 POST, PUT, DELETE
    7 条回复    2018-02-25 23:36:21 +08:00
    111111111111
        1
    111111111111  
       2018-02-22 18:39:29 +08:00
    rest 的版本控制问题是一个痛?是否愿意分享一下遇到哪些痛
    ns2250225
        2
    ns2250225  
    OP
       2018-02-22 20:04:37 +08:00
    @111111111111 就是写接口的时候,要带上 v1,v2 等的版本号。。。
    tomczhen
        3
    tomczhen  
       2018-02-22 22:39:53 +08:00   ❤️ 1
    REST 主要的问题一个是数据有冗余,一个是请求多级关系数据查询是串行——必须先获取上级资源,再来获取子资源,版本基本上就三个方式:

    URI - https://example.com/api/v2/foo
    Custom Header - api-version: 2
    Accept Header - Accept: application/vnd.app.v2+json

    URI 直观,简单易懂,但是违背了同一个资源 URI 不变这个原则。放 Header 里面不直观,对队友有要求,(个人理解)自定义头和 Accept 头的区别是 Accept 更符合 Http 协议的设计。

    REST 的优势在于 URI 明确,资源权限控制清晰。GraphQL 对外是灵活而强大,不过解决权限、性能问题对于后端而言复杂度是高于 REST 的——毕竟 REST 成熟的框架更多。
    freemagico
        4
    freemagico  
       2018-02-24 22:21:31 +08:00
    学习了。请问楼主 graphQL 的多表查询要怎么实现呢?感觉 graphQL 的 schema 设计比较关键,我研究了一下还没什么心得……
    ns2250225
        5
    ns2250225  
    OP
       2018-02-25 09:24:04 +08:00
    @freemagico 关键是 model 里面定义好表的关系,然后直接查询的时候,同时查多张表的数据就好了
    ns2250225
        6
    ns2250225  
    OP
       2018-02-25 09:32:06 +08:00
    @freemagico 像这样:
    query {
    allBooks {
    title{
    title
    }
    author{
    name
    }
    }
    allTitles {
    title
    }
    allAuthors{
    name
    }
    }
    freemagico
        7
    freemagico  
       2018-02-25 23:36:21 +08:00
    @ns2250225 感谢回复,那其实多表查询对于后端来说依然是一样的查询过程吧,时间上并没有节省,只是前端接口定义的时候比较易懂。这么理解对嘛?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   921 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:56 · PVG 03:56 · LAX 11:56 · JFK 14:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.