前端对接这样的 API ,各位老哥有什么建议吗

2019-01-03 23:38:01 +08:00
 doommm

前端对接这样的 API,各位老哥有什么建议吗

先说一下项目背景

互联网公司,做自己的产品,全新的统计项目。3 人团队,1 产品 + 1 后端 + 1 前端。

项目负责人(产品)是从银行出来的,和后端一起设计、维护数据库,制定了前后端 API。

上个月就 API 字段命名方式我提过一个问题( https://www.v2ex.com/t/514030)

后续和负责人沟通的结果是:API 和字段名没有改变的可能,没有、也不会提供什么字段表,不好做就自己想办法。

当时大家建议去做 mapping,因为各种原因,目前我只把这些 code 全部变量化,加上 JSDoc,并且所有跟这些 code 相关的代码都单独用TypeScript来写。

目前页面已经写完了,用的 Vue + echarts,数据目前都是我本地 Mock 的,因为 API 给的晚,Mock 的格式没有和实际完全对应。

API 示例

// request params
// 请求 A 表这些字段,post to api/a
{
  "date_start": "2019-1-1",
  "date_end": "2019-1-3",
  "id": "v2ex",
  "cols": "A0001,A0002,A0003,A0004..." 
}
// B 表,post to api/b
{
  "date_start": "2019-1-1",
  "date_end": "2019-1-3",
  "id": "v2ex",
  "cols": "A0001,A0002,B0001,B0002..." 
  // ...
}
// ...

// 前端请求哪些字段,后端就只返回这些字段的数据
// 部分字段通用
// 返回数据格式区分宽表、窄表

// 宽表返回格式
{
  "A0001": "2019-1-1", // date,通用
  "A0002": "v2ex", // id,通用
  "A0003": "1",
  "A0004": "1",
  // ...
}

// 窄表返回格式
{
  "A0001": "2019-1-1",
  "A0002": "v2ex",
  "INDEXID": "F0001"
  "INDEXV": "1"
},
{
  "A0001": "2019-1-1",
  "A0002": "v2ex",
  "INDEXID": "F0002"
  "INDEXV": "1"
},
// ...

考虑的问题

目前我针对每一项具体业务写了 Adapter ,用来管理要发送的数据列,以及返回数据的转换处理工作 。

感觉项目中用的最多的就是 Array.map, Array.reduce 这两个方法。。UI 的文本、各种选项下对应的请求字段、各种图表数据都跟那些 code 做了对应。很怕以后维护的时候看不懂。

目前各个业务模块的请求是单独发送的(一个页面多个模块),一次刷新 devtool 里面各种 abcdef 的请求,如果存在跨表的业务(Promise.all 等待)就有更多。等浏览器排队走完。

目前后台数据还不完善,很多返回值都是 null,速度还无法评估。

请问前端目前这样处理有没有什么问题?听说过 GraphQL, 不知道是不是可以解决这类问题?不过估计也没有用的机会。


还想问问各位老哥,前端对接这样的接口,有没有什么好的做法?有没有什么坑是需要注意的?

另外,因为以前只做过后端给大接口(聚合了目标业务需要的所有数据)的项目,想问问这样的接口算不算 RESTful ? 后端 API 这样设计,是不是后续只要负责往数据库里面填数据就可以了?


试用期还有一个月,做的好心累,感觉自己好菜

8298 次点击
所在节点    程序员
67 条回复
rasck
2019-01-04 15:12:41 +08:00
怎么不直接传 sql 语句 23333
rasck
2019-01-04 15:13:34 +08:00
@ChenFanlin 我也以为碰见同一家公司了,仔细看下楼主说了上个月发过帖子问过了
jinhan13789991
2019-01-04 15:19:57 +08:00
让后端给你数据库地址和密码,自己直连数据库。
ChenFanlin
2019-01-04 15:20:20 +08:00
@rasck #42 多谢, 眼瞎了....,那确实也算是同一家公司了
reself
2019-01-04 15:20:54 +08:00
不给映射表做个鸡巴,这后端已经不是懒了,完全没有团队意识
stzz
2019-01-04 15:32:14 +08:00
这种设计要后端干嘛,和直接传 SQL 语句有啥区别
yamamotoahua
2019-01-04 15:36:22 +08:00
@chniccs 前端=设计稿具现化工具? 233
auroraccc
2019-01-04 15:39:42 +08:00
按照你们这个后端和项目负责人的性格,不要想 graphql 了,这个需要后端配合的
doommm
2019-01-04 17:05:15 +08:00
@ChenFanlin 同一家公司
doommm
2019-01-04 17:07:52 +08:00
@tosmq009

公司将近 100 人,按产品组分的。这个项目组是单独一个小组,产品直接对老板负责,前端没有技术老大
lolizeppelin
2019-01-04 17:11:14 +08:00
让不让看后端代码? 让看 看完再喷呗
noe132
2019-01-04 17:56:27 +08:00
比我之前待的公司 api 接口从 function001 到 funtion152 还是强一点。。。
传个二维数组,用逗号分隔后再用分号分隔连接成字符串传给后端
后端再存储过程里再去解析出来。。。
doommm
2019-01-04 20:14:12 +08:00
@reself …所以是要赶紧跑路吗
qinrui
2019-01-04 22:56:03 +08:00
@doommm 而且建行这个页面,api 吐出的 json 格式还不符合规范,真的烂
947211232
2019-01-05 00:16:25 +08:00
这么有诗意的规范实在令人倍感无力。
dapang1221
2019-01-05 00:22:54 +08:00
感觉吐槽这种字段名的帖子已经挺多了,等保要求里好像的确是有这个加密要求,规定如此……
kingcos
2019-01-05 00:28:21 +08:00
我比较奇怪的一点是,微服务微服务,应该是针对后端的逻辑,前端需要什么东西就不能组装一下吗…难道后端微服务,前端就要一次性调四五个接口才能拿到所有需要的数据,这样割裂的,是微服务的锅?
Lindp
2019-01-05 10:40:14 +08:00
我相信大部分公司应该都是前端是大爷,后端应该准备好所有数据给前端服务,而且还要是前端最简单的实现方式,毕竟数据还是后端处理起来方便嘛
Gakho
2019-01-05 10:42:00 +08:00
@kingcos 微服务 API 网关了解一下
doommm
2019-01-06 00:08:31 +08:00
所以真的没有什么建议吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/523660

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX