Web 服务 API 设计中哪个模式更好
Posted
技术标签:
【中文标题】Web 服务 API 设计中哪个模式更好【英文标题】:Which schema is better in web service API design 【发布时间】:2012-11-20 01:45:51 【问题描述】:最近,我们的团队打算为我们现有的网站开发移动(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 平台上解析真的会变得更快并获得更少的内存资源吗? 是否可以减少客户端和服务器之间的开销?谢谢。
【问题讨论】:
关于您的第二个和第三个问题,您的基准测试(确定响应大小减少 20~40%)确定了什么? 尚未对解析大数据进行深入测试。对不起。 【参考方案1】:当我为 android 做这样的应用程序时,我只解析一个 JSON 并将其放入数据库中。后来我使用 ContentProvider 来访问它。在您的情况下,您可以使用第二个模式,但没有用户、类别部分。改用延迟加载,但如果类别和用户经常重复,这将是一个很好的解决方案。
【讨论】:
您如何(或何时)更新存储在 ContentProvider 中的数据?由于内容可能会经常更改或创建后不会更改,因此我们是否必须分析更改频率不高,以便用户设置自己的应用程序更新策略? 用户名是不变的,我不允许更改,与 id 和永久链接相同。电子邮件是私人的。如果您有任何其他字段,您可以在请求用户详细信息时加载它们。类别也是如此。以上是关于Web 服务 API 设计中哪个模式更好的主要内容,如果未能解决你的问题,请参考以下文章
asp.net mvc 和 web api 哪个更好 Http POST 或 PUT