接口 api,后端结构返回问题?

2019-08-30 10:00:20 +08:00
 Zach369

最近跟 ios 接口联调,ios 说我的 api 接口返回格式不合理。想问问大家工作中是怎么处理的?

我的接口返回样子:

   {
     "data": [
       {
         "id": 28,
         "action": 2,
         "user": {
           "id": 1,
           "name": "zach",
           "avatar": ""
         },
         "topic": {
           "id": "279a11cf-4a21-4772-ba07-5e51b499252d",
           "title": "",
           "content": "我是蛋糕 我在躲猫猫"
         },
         "comment_id": 1,
         "created_at": 1565834869
       }
     ],
     "pagination": {
       "current_page": 1,
       "per_page": 10,
       "total": 1
     }
   }

ios 想要的数据结构:

  {
    "data": [
      {
        "id": 28,
        "action": 2,
        "user_id": 1,
        "user_name": "zach",
        "user_avatar": "",
        "topic_id": "279a11cf-4a21-4772-ba07-5e51b499252d",
        "topic_title": "xxx",
        "topic_content": "我是蛋糕",
        "comment_id": 1,
        "created_at": 1565834869
      }
    ],
    "pagination": {
      "current_page": 1,
      "per_page": 10,
      "total": 1
    }
}

两者之间的变化 就是 将 user 和 topic 对象打散成 key:value 的形式。 想问问广大的后端开发人员以及 ios,大家是怎么处理的那?使用那种返回形式?

7924 次点击
所在节点    API
93 条回复
yixiang
2019-08-30 12:21:04 +08:00
哪个好放在一边,没有必要听 ios 的意见。

既然后端接口是给多个端用的,那就不应该照顾单独一个端的开发,而是后端人员说了算。

假设安卓先开发完成,已上线,ios 说接口格式不合理,于是你改了格式,然后安卓端崩了,谁的锅?首先是团队总负责人(流程分工不清晰),其次是实际负责后端的后端人员,再次才是提出意见的 ios。

他不用为他的意见负责。但你写了接口是要给多端负责的。
a15819620038
2019-08-30 12:46:09 +08:00
理论上层级越少越好。
LeeSeoung
2019-08-30 12:46:17 +08:00
组件需要做成啥样就提供啥样的数据,哪分那么多好坏,你提供第一种,组件要求第二种的格式,你后端就算返回第一种,也还是需要前端去手动拼接,这种东西问清楚前因后果就行了。
sparkle2015
2019-08-30 13:28:53 +08:00
作为一个前端和 app 开发者,目前为止用过的是第一种,第二种还没见到过。第一种层次分明,意义明确,而且对于后端实现也更简单 (写过点 rails),看个 GitHub 的 API 设计: https://developer.github.com/v3/repos/comments/#response。第二种无论是客户端还是后端的角度我个人都接受不了。
Vegetable
2019-08-30 13:32:49 +08:00
@slgz 看嗓门
Egfly
2019-08-30 13:40:19 +08:00
支持第一种,因为我就是这么处理的 ( :dog)。 我们前端也能接受第一种,但是要能处理成第二种他们更乐意
fhvch
2019-08-30 13:49:20 +08:00
哥们,我觉得你给的数据没毛病~
Hyseen
2019-08-30 13:55:56 +08:00
作为一个后端,当然是支持第一种了
optional
2019-08-30 14:03:38 +08:00
当然是第一种,如果前端喜欢第二种让他自己处理
learnshare
2019-08-30 14:08:33 +08:00
你做得对,比较合理
encro
2019-08-30 14:14:30 +08:00
当然第一种,model 关联,接口数据就出来了,为什么还人工处理一层,浪费时间,容易出 BUG。
问题在于你们写的模型不一样,你可以搜索一个好点的客户端代码 JSON 解析器?
also24
2019-08-30 14:24:25 +08:00
如果 user topic 这两个结构,在其它接口中也有出现,且结构逻辑统一,我觉得第一种更好一些。

如果这只是一个单独的接口,我觉得两种都可以接受。
但是第二种对客户端来说,在反序列化的时候会更方便一些。
IamUNICODE
2019-08-30 14:30:10 +08:00
几年前我坚持第一个,因为我觉得这样分更合理,后来跟手机端对接久了,就第二个了。。。手机端水平不一样,遇到一个好的不容易,他们要什么就什么吧。。。
youxiachai
2019-08-30 14:37:29 +08:00
ios 解析 json 还是不方便....
不过也是 ios 赖....
Felldeadbird
2019-08-30 14:48:49 +08:00
我觉得第二个好。第一个层次清晰,但是呢浪费了自己时间啊。因为用你接口的人,有时候喜欢平级一次性输出所有东西,偷懒啊。

当然,具体看业务发展。如果后续需要更复杂的交互,必定第一种。
zifangsky
2019-08-30 14:56:50 +08:00
作为一个后端,当然是支持第一种了
oaix
2019-08-30 15:33:01 +08:00
嵌套的模型也可以返回展平的结构的。
@JsonUnwrapped 是你的好朋友
linxl
2019-08-30 15:38:58 +08:00
有个问题, 这里的 data 是指什么?
jjianwen68
2019-08-30 15:48:08 +08:00
个人倾向第一种,逻辑清晰
11ssss
2019-08-30 15:49:10 +08:00
做为一个后端,当然是支持你了

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

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

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

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

© 2021 V2EX