我现在希望展示一组 Answer 对象,如下。
其中一个属性ques_id
,是外键连到Question
表的,我希望在展示Answer
时,同时展示Quesiton
的title
属性。
前后端是通过restful api
来通信的。如果按照我的需求,那么每展示一个answer
时,我都要去请求获取一个quesiton
,这样不是会很耗时间?有什么更好的办法?
1
lecher 2017-02-21 00:55:14 +08:00 via Android 1
索性查的时候把答案列表拿出来之后,整个列表的 ques_id 都取出来直接去查一次数据库,把问题描述拿出来,拼成一组完整的数据。消耗不了多少性能,业务还可以简单不少。
纯粹符合范式的数据处理方式有时候兼顾不了性能。适当做做预处理或者缓存性能可以好一些。 |
2
huanghua123 OP @lecher 这样的话 restful api 如何设计
|
3
gwind 2017-02-21 15:34:14 +08:00
RESTful 也不是解决一切事情的法宝,总有些 API 需要灵活对待。考虑这个问题的时候,可以加上该 API 调用频率,每次调用系统负载,消耗时间等因素一起分析。就算不 RESTful 也可以的。
另外, GraphQL 是一个很有吸引力的 API 创新,可以看看。 |
4
huanghua123 OP @gwind 也就是说额外设计一个 api ,把 answer 以及 question 的 title 结合到一起返回,这样?
|
5
gwind 2017-02-21 16:59:10 +08:00
也可以,主要是考虑必要性,不必拘泥 RESTful
|
6
huanghua123 OP @gwind 嗯,一开始也是想到这样做。但是总觉得不是很完美。
|
7
gwind 2017-02-21 17:33:38 +08:00 1
@huanghua123 理解,我接触 RESTful 过程中,也有这种感觉,后来看过很多优秀的服务 API ,发现他们也有非 RESTful 的,慢慢“理解”了。 :-)
|
8
lecher 2017-02-21 19:15:57 +08:00 1
@huanghua123 我的建议是在 anwser 的 restful 接口里面,就可以把 question 的信息一并拼进去,因为一个单独的 anwser 的信息不足以组成一个完整的信息。
这样只要查询 anwser 的时候,额外去查一下 question 的信息拼起来,前端可以根据实际情况决定是否显示 question 的信息。而且此时你的大部分前端功能都是 anwser 与 question 的信息一起显示,没必要为此单独发两个请求。 |
9
huanghua123 OP @lecher 感谢,明白了。
|