大家工作中的前后端是如何合作的?如何减少接口变更?

2020-06-16 11:10:03 +08:00
 crclz

引言

首先我大量查阅了 V2EX 、知乎的讨论,发现前后端主流做的合作方法都是:

  1. 前后端先商定一份接口文档(如果自动化一点,那么可以写一堆未实现的方法,然后用 swagger 生成文档)
  2. 接着,前后端并行地开发,后端实现接口,前端依据接口文档进行开发
  3. 前后端联调

问题

但是,在实践中,我发现了一些问题:

起草文档阶段往往是非常短暂的。在这个过程中,开发者无法了解系统全貌,自然无法确定完接口列表。随着前端和后端的开发工作的推进,这些忘记的接口、需要修改的接口才逐渐暴露,这会增加前后端合作、沟通的时间成本。

那么,在起草文档阶段,是否有一个系统的方法,来确保最小化这种需要增加、修改的接口数量?

6353 次点击
所在节点    Java
51 条回复
slyang5
2020-06-16 12:52:58 +08:00
用 protobuf ?
hantsy
2020-06-16 12:54:00 +08:00
@Kilerd Moco 是什么鬼???
ChanKc
2020-06-16 13:05:01 +08:00
理论上,restful 和 hateoas 就是为了解决这个问题的。
当然实际上,restful 已经变成了“有比较好看的 URL 的 API”的意思了
ty89
2020-06-16 13:17:09 +08:00
@carbrokers 这样别人爬你数据就太方便了,简直就是直接复制你的数据库
hantsy
2020-06-16 13:18:07 +08:00
@chendy 以前我觉得比较难受是用 Json Schema 定义( jsonschema.org ,这个也是标准 draft)把交互格式都是定好。

有在线工具 https://jsonschema.net/home

然后前后全部写测试验证符合就行了,这个比较直接。

后端 Java 可以用 RestAssured (包括 Jsonschema vilidator)验证.

前端按 JsonSchema 定义生成 json data 文件测试中 mock 就可以了。
ty89
2020-06-16 13:19:24 +08:00
从根本上的解决方案应该是 TDD, 测试驱动开发。 尤其是后端。
hantsy
2020-06-16 13:33:57 +08:00
@ty89 这是必须的,对 API 开发很容易的事情。

如果以前传统 Web 页面测试难写,说得过去,国内的项目页面变化太化,页面设计 Elment 不标准。现在纯 API 测试真的很简单。
zzzmh
2020-06-16 13:45:08 +08:00
1. 生成文档,我们用 swagger,另外还有一个 apidoc 生成放到静态服
2. 我要是能帮前端写掉一部分的代码尤其是逻辑类的,我会实现一版 demo
3. 再有分歧就互掐
houfeibin
2020-06-16 13:46:08 +08:00
@carbrokers 感觉你这样数据会很不安全
hantsy
2020-06-16 14:04:28 +08:00
@zzzmh Swagger 结合其它的一些工具,也可以生成不错的静态文档,https://github.com/hantsy/building-restful-apis-with-springmvc-gitbook/blob/master/swagger.md#documents-rest-apis
noobsheldon
2020-06-16 14:07:01 +08:00
一个接口,通过接口参数区分逻辑,完美。
noobsheldon
2020-06-16 14:07:45 +08:00
ISSSSSSS
2020-06-16 15:03:20 +08:00
所以必然要有联调试过程。
index90
2020-06-16 15:15:08 +08:00
如果一个软甲只加代码不修改,是几乎不会出错的。接口也一样,不存在修改接口,只有加接口,用 /v1/xxx /v2/xxx 去区分。
la2la
2020-06-16 15:33:27 +08:00
后端开发搬着笔记本做到前端小姐姐旁边调
Seneca
2020-06-16 15:35:23 +08:00
我们是后端写接口,前端等着接口来了,直接调用就行。给你啥你用啥
xff1874
2020-06-16 15:45:40 +08:00
我们目前正在做这个事情,原理就是读取定义的接口和真实的请求,然后做比对
stevenkang
2020-06-16 16:38:14 +08:00
需求来了,基本上过一遍就能把接口定下来。

要改接口一般都是由于需求不明确(或自己没理解到位)、需求变更等原因。

这种情况下改一下接口就行了,毕竟改需求前端后端不都得过一遍嘛。
lplk
2020-06-16 16:59:43 +08:00
@carbrokers #8 我就这样搞过,虽然很省事,但是如果后期表格字段不断增加,这样会增加网络传输数据的时间,甚至有的字段会很大,最好还是严格规范
msg7086
2020-06-16 17:02:41 +08:00
改接口 = 改文档,然后前段照着文档来不就行了。
BDD/TDD 很多框架都可以根据测试数据来生成文档的。

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

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

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

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

© 2021 V2EX