灌水 open api 接口设计,能不能重新设计?

花开 · 2016年09月13日 · 最后由 花开 回复于 2016年09月13日 · 1994 次阅读

open api 的接口能不能重新设计,方便使用?
如下是 Testerhome 提供的接口,但是如果需要转换成 javabean的时候,这时候就麻烦了,没有规律,所有接口外面强制使用的 jsonobject 设计.
但是里面节点的名字又是不同的,这样设计对应的 javabean的时候就需要设计很多重复的.

{
    "nodes": [
        {
            "id": 1,
            "name": "Ruby",
            "topics_count": 1692,
            "summary": "Ruby 是一门优美的语言",
            "section_id": 1,
            "sort": 0,
            "section_name": "Ruby",
            "updated_at": "2015-03-01T22:35:21.627+08:00"
        },
      ...
    ]
}

其实这样的接口我感觉,设计成下面这样是不是更好点:

 [{
            "id": 1,
            "name": "Ruby",
            "topics_count": 1692,
            "summary": "Ruby 是一门优美的语言",
            "section_id": 1,
            "sort": 0,
            "section_name": "Ruby",
            "updated_at": "2015-03-01T22:35:21.627+08:00"
        },
      ...
]

或获取用户信息

{
    "id": 1,
    "login": "chenhengjie123",
    "name": "a",
    "avatar_url": "http://gravatar.com/avatar/357a20e8c56e69d6f9734d23ef9517e8.png?s=120",
    "location": "",
    "company": null,
    "twitter": null,
    "website": "",
    "bio": "",
    "tagline": "",
    "github": "",
    "created_at": "2015-02-28T20:09:58.183+08:00",
    "email": "a@b.com",
    "topics_count": 8,
    "replies_count": 33,
    "following_count": 1,
    "followers_count": 0,
    "favorites_count": 3,
    "level": "admin",
    "level_name": "管理员"
  }
共收到 5 条回复 时间 点赞

没懂为什么去掉 nodes 这个节点后 javabean 设计起来就能降低重复。能举个具体例子不?

另外,这个不是 OAuth 接口的内容把,OAuch 只有登录时用到,拿到 access token 后就没它啥事了。

#1 楼 @chenhengjie123 这个接口是用来获取 node 节点的,所有返回的数据应该是一个个 node 节点的信息,
现在外面多了一层,程序自动解析的时候,会多了一些没有什么用的类,例如 java bean,现在就需要设计两个类来解析
这个节点,现在 NodeResponse 这个类很多余.

如果少了一层且没有nodes这个节点,可以直接解析为 List

class NodeResponse{
  private List<Node> notes;
  ...
}

class Node{
  private long id;
  private String name;
}

#2 楼 @yaming116 我看了下目前 testerhome android app 的源码,里面貌似没有这个问题。

它的 node 类是这么设计的:https://github.com/testerhome/A-Native-TesterHome/blob/47e6a8c5e881b4e71d815ad29df78f0db519e467/app/src/main/java/com/testerhome/nativeandroid/models/GetNodesResponse.java ,node 这个节点通过转换会变成类里面一个名为 node 的实例变量,node 本身是 ArrayList ,这样就不需要多写一个类了。

#2 楼 @yaming116 我明白你的意思了,对于你提到的这两个接口确实少一个 response 类比较方便。

但从扩展方向考虑,例如给请求里面添加一些类似 token 或者其它用途的、非 node 内部的字段,采用你说的方式扩展起来感觉比较难保证向下兼容。

#4 楼 @chenhengjie123 如果从你说的整体性来说,那应该这样会好点.

修改策略可以在接口里面添加参数或头信息里面添加参数,指定相应这个节点的名称,默认是当前状态.

//最外层永远都是一个json object
{
  otherdata:"test",
  //节点名字不变化
  data : "相应的接口数据,可以是json object 或 json array"
}
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册