接口 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,大家是怎么处理的那?使用那种返回形式?

7849 次点击
所在节点    API
93 条回复
kison73
2019-08-30 10:02:53 +08:00
都可以,主要是沟通好就可以
tabris17
2019-08-30 10:03:18 +08:00
当然是有层级的更合理。iOS 只是懒而已
DevinL
2019-08-30 10:03:21 +08:00
做为一个后端,当然是支持你了- -
misaka19000
2019-08-30 10:03:50 +08:00
显然你的合理,iOS 估计是懒不想处理这么多层级
justfindu
2019-08-30 10:05:19 +08:00
当然支持你啊 而且你的接口他们可以直接对 user 和 topic 创建相应的 model. 应该是更方便呀
zhuzhibin
2019-08-30 10:05:47 +08:00
例如你的 topic 那一层 只有一个 id 就没必要分层其实 直接外层返回 topic_id
whypool
2019-08-30 10:06:42 +08:00
层级太多会被打的
90d0n
2019-08-30 10:07:38 +08:00
谁嗓门大听谁的 (支持你的格式
mhycy
2019-08-30 10:07:46 +08:00
作为一个前后端都写的表示,iOS 的那个接口建议更不合理 (偷懒+1
MetalCore
2019-08-30 10:08:31 +08:00
第一个数据结构 java 常用,第二个数据结构 php 常用
qiayue
2019-08-30 10:09:57 +08:00
@MetalCore 不是吧
SpiderShrimp
2019-08-30 10:10:59 +08:00
嘻嘻,你的好。虽说都可以实现没错,但是将同个对象的字段抽出来放到一起,可以提高 json 的可读性。
otakustay
2019-08-30 10:11:27 +08:00
但是为什么你的 comment_id 不是 comment: {id: xxx}呢?
Vegetable
2019-08-30 10:12:27 +08:00
首先,这东西没有什么规则可讲,有的前端比较懒,特点就是
“ XXX 你这几个接口能不能给我合并成一个?”
“这个接口包了这么多层吗?”

你这个数据我看起来,两个设计都有自己的优点,我偏向后边的,不在单个对象中包含二级对象,使用前缀进行区分。第一个那个多层数据结构,不局限在前端,如果想映射成对象,第一个做法是只定义一个对象,有所有的字段,第二个是定义 3 个对象,分别是记录本身,User 对象和 Topic 对象再进行关联,太麻烦了。
tabris17
2019-08-30 10:12:43 +08:00
@SpiderShrimp json 是给程序用的,又不是给你读的,真要读转换成 yaml 格式呗
SpiderShrimp
2019-08-30 10:14:50 +08:00
@tabris17 是吗?你没对接过吗?后端制定 json,前端难道不用理解?不理解如何编码呢?
tabris17
2019-08-30 10:17:30 +08:00
@SpiderShrimp 把 json 转成 yaml 给他读呗,文档是文档,代码是代码
MarkOrca
2019-08-30 10:18:06 +08:00
让前端给出理由,然后写进文档,说到底是给前端用的,他要什么样的就什么样的呗。
SpiderShrimp
2019-08-30 10:21:26 +08:00
@tabris17 多此一举。后面的那个那么多 topic 前缀,倘若 topic 字段多了,看起来肯定没上面的舒服,但如果像前面 13#说的 comment_id 这种,字段只有一个,那就没必要抽成一个对象。
xrzxrzxrz
2019-08-30 10:23:46 +08:00
第一种分层结构比较清晰明了,好理解,比较面相对象,不过嵌套多层
第二种用起来方便,结构就没那么清晰了,也可以说是懒吧 0 0
不过我觉得其实各有利弊吧,毕竟开发方便些也算是一种优势吧。。(最后就看前端后端谁的态度强硬了)(手动狗头)

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

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

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

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

© 2021 V2EX