V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
huanghua123
V2EX  ›  问与答

一个关于 restful api 问题

  •  
  •   huanghua123 · 2017-02-20 23:38:20 +08:00 · 1099 次点击
    这是一个创建于 2615 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我现在希望展示一组 Answer 对象,如下。 其中一个属性ques_id,是外键连到Question表的,我希望在展示Answer时,同时展示Quesitontitle属性。 前后端是通过restful api来通信的。如果按照我的需求,那么每展示一个answer时,我都要去请求获取一个quesiton,这样不是会很耗时间?有什么更好的办法?

    9 条回复    2017-02-21 19:23:20 +08:00
    lecher
        1
    lecher  
       2017-02-21 00:55:14 +08:00 via Android   ❤️ 1
    索性查的时候把答案列表拿出来之后,整个列表的 ques_id 都取出来直接去查一次数据库,把问题描述拿出来,拼成一组完整的数据。消耗不了多少性能,业务还可以简单不少。

    纯粹符合范式的数据处理方式有时候兼顾不了性能。适当做做预处理或者缓存性能可以好一些。
    huanghua123
        2
    huanghua123  
    OP
       2017-02-21 15:19:13 +08:00
    @lecher 这样的话 restful api 如何设计
    gwind
        3
    gwind  
       2017-02-21 15:34:14 +08:00
    RESTful 也不是解决一切事情的法宝,总有些 API 需要灵活对待。考虑这个问题的时候,可以加上该 API 调用频率,每次调用系统负载,消耗时间等因素一起分析。就算不 RESTful 也可以的。

    另外, GraphQL 是一个很有吸引力的 API 创新,可以看看。
    huanghua123
        4
    huanghua123  
    OP
       2017-02-21 16:29:27 +08:00
    @gwind 也就是说额外设计一个 api ,把 answer 以及 question 的 title 结合到一起返回,这样?
    gwind
        5
    gwind  
       2017-02-21 16:59:10 +08:00
    也可以,主要是考虑必要性,不必拘泥 RESTful
    huanghua123
        6
    huanghua123  
    OP
       2017-02-21 17:30:51 +08:00
    @gwind 嗯,一开始也是想到这样做。但是总觉得不是很完美。
    gwind
        7
    gwind  
       2017-02-21 17:33:38 +08:00   ❤️ 1
    @huanghua123 理解,我接触 RESTful 过程中,也有这种感觉,后来看过很多优秀的服务 API ,发现他们也有非 RESTful 的,慢慢“理解”了。 :-)
    lecher
        8
    lecher  
       2017-02-21 19:15:57 +08:00   ❤️ 1
    @huanghua123 我的建议是在 anwser 的 restful 接口里面,就可以把 question 的信息一并拼进去,因为一个单独的 anwser 的信息不足以组成一个完整的信息。
    这样只要查询 anwser 的时候,额外去查一下 question 的信息拼起来,前端可以根据实际情况决定是否显示 question 的信息。而且此时你的大部分前端功能都是 anwser 与 question 的信息一起显示,没必要为此单独发两个请求。
    huanghua123
        9
    huanghua123  
    OP
       2017-02-21 19:23:20 +08:00
    @lecher 感谢,明白了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1248 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 17:47 · PVG 01:47 · LAX 10:47 · JFK 13:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.