最近,我们的团队打算为我们现有的网站开发移动(iphone,android平台)应用程序,让用户可以使用应用程序更容易地通过应用程序阅读我们的内容。
但是我们的团队对 API 返回的 JSON 模式有不同的看法,下面是示例响应。
模式类型 1:
{
"success": 1,
"response": {
"threads": [
{
"thread_id": 9999,
"title": "Topic haha",
"content": "blah blah blah",
"category": {
"category_id": 100,
"category_name": "Chat Room",
"category_permalink": "http://sample.com/category/100"
},
"user": {
"user_id": 1,
"name": "Hello World",
"email": "helloworld@hello.com",
"user_permalink": "http://sample.com/user/Hello_World"
},
"post_ts": "2012-12-01 18:16:00T0800"
},
{
"thread_id": 9998,
"title": "asdasdsad ",
"content": "dsfdsfdsfds dsfdsf ds",
"category": {
"category_id": 101,
"category_name": "Chat Room 2",
"category_permalink": "http://sample.com/category/101"
},
"user": {
"user_id": 2,
"name": "Hello baby",
"email": "hellobaby@hello.com",
"user_permalink": "http://sample.com/user/2"
},
"post_ts": "2012-12-01 18:15:00T0800"
}
]
}
}
模式类型 2:
{
"success": 1,
"response": {
"threads": [
{
"thread_id": 9999,
"title": "Topic haha",
"content": "blah blah blah",
"category": 100,
"user": 1,
"post_ts": "2012-12-01 18:16:00T0800"
},
{
"thread_id": 9998,
"title": "asdasdsad ",
"content": "dsfdsfdsfds dsfdsf ds",
"category": 101,
"user": 2,
"post_ts": "2012-12-01 18:15:00T0800"
}
],
"category": [
{
"category_id": 100,
"category_name": "Chat Room",
"category_permalink": "http://sample.com/category/100"
},
{
"category_id": 101,
"category_name": "Chat Room 2",
"category_permalink": "http://sample.com/category/101"
}
],
"user": [
{
"user_id": 1,
"name": "Hello World",
"email": "helloworld@hello.com",
"user_permalink": "http://sample.com/user/Hello_World"
},
{
"user_id": 2,
"name": "Hello baby",
"email": "hellobaby@hello.com",
"user_permalink": "http://sample.com/user/Hello_baby"
}
]
}
}
一些开发人员声称,如果使用模式类型 2,
- 如果类别和用户实体重复过多,可以减少数据大小。它确实减少了至少 20~40% 的响应纯文本大小。
- 一旦数据大小变小,在将其解析为 JSON 对象时,内存会变少
- categoey & user 可以存储在 hash-map 中,便于复用
- 减少检索数据的开销
我不知道模式类型 2 是否真的增强了。因为看了很多API文档,从来没见过这种模式设计。对我来说,它看起来像一个关系数据库。所以我有几个问题,因为我没有设计 Web 服务 API 的经验。
- 是否违反 API 设计原则(易于阅读、易于使用)?
- 在 IOS/Android 平台上解析真的变得更快,内存资源更少吗?
- 它可以减少客户端和服务器之间的开销吗?
谢谢。