企业IM (或业务系统)web api的json格式设计思考(原创)
在企业IM开发中,经常用到和业务系统的数据交换,在中国企业最常见的比如组织架构变更,一般在客户端加密保存了组织架构树(便于快速的查询和树展示),当HR或OA或AD域这些管控企业组织架构的数据发生改变,需要IM服务器推送最新的组织架构,如果推送整个组织架构,数据量非常大(千人以上时),恰当的方式是:仅对变化量通过版本比对进行更新,而不是整体更新。
实际上,不仅仅是组织架构变更的,所有的http web api设计都可以参考这个设计。
取个名字:动词解析式Json数据格式 (Verb Parsing Json,简称VPJ,哈哈)。简要说明:
创建新数据:
{ "create": {
"table1": [ {"verb": value}, {"verb": value}, ...],
"table": [ {"verb": value}, {"verb": value}, ...],
}}
例1,添加同事的vcard(根据username):
{ "create": { "ofVCard": ["add": {"username": "zhangsan", "vcard": "<vCard xmlns="vcard-temp"><N><FAMILY/> <GIVEN>张三</GIVEN> </N> <ORG><ORGNAME/> </ORG>......</vCard>"} ] } }
更新数据:
{ "update": {
"table1": [ {"verb": value}, {"verb": value}, ...],
"table2": [ {"verb": value}, {"verb": value}, ...],
}}
例1,更新电话号码(根据ID):
{ "update": { "ofUser": ["edit": {"id": 10002, "phone": "13710699999"} ] } }
例2,更新电话号码(根据USERNAME):
{ "update": { "ofUser": ["edit": {"username": “wangxin”, "phone": "13710699999"} ] } }
例3,更新一位同事电话号码,同时增加一个新人,同时删除2位同事(根据USERNAME):
{ "update":
{
"ofUser": ["edit": {"username": “wangxin”, "phone": "13710699999"} ]
"ofUser": ["add": {"username": “zhangsan”, "phone": "13710688888", "name": "张三", "email": "zhangsan@163.com"} ]
"ofUser": ["remove": {"username": “lisi”} ]
"ofUser": ["remove": {"username": “wangwu”} ]
}
}
例4,删除一个同事的Vcard(根据USERNAME):
{ "update": { "ofVCard": [{"remove": {"username": zhangsan} }] } }
总之,就是一个动词控制api。
客户端实现代码和openfire服务器端插件代码不赘述。
企业IM (或业务系统)web api的json格式设计思考(原创)的更多相关文章
- Web API删除JSON格式的文件记录
Insus.NET的系列Web Api学习文章,这篇算是计划中最后一篇了,删除JSON格式的文件记录.前一篇<Web Api其中的PUT功能演示>http://www.cnblogs.co ...
- .Net MVC 4 Web Api 输出Json 格式
1.Global 中增加json输出 GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add( ...
- [Web API] 如何让 Web API 统一回传格式以及例外处理[转]
[Web API] 如何让 Web API 统一回传格式以及例外处理 前言 当我们在开发 Web API 时,一般的情况下每个 API 回传的数据型态或格式都不尽相同,如果你的项目从头到尾都是由你一个 ...
- [Web API] 如何让 Web API 统一回传格式以及例外处理
[Web API] 如何让 Web API 统一回传格式以及例外处理 前言 当我们在开发 Web API 时,一般的情况下每个 API 回传的数据型态或格式都不尽相同,如果你的项目从头到尾都是由你一个 ...
- Web API核查表:设计、测试、发布API时需思考的43件事[转]
Web API核查表:设计.测试.发布API时需思考的43件事 当设计.测试或发布一个新的Web API时,你是在一个原有的复杂系统上构建新的系统.那么至少,你也要建立在HTTP上,而HTTP则是 ...
- .net mvc web api 返回 json 内容,过滤值为null的属性
原文:http://blog.csdn.net/xxj_jing/article/details/49508557 版权声明:本文为博主原创文章,未经博主允许不得转载. .net mvc web ap ...
- MVC web api 返回JSON的几种方式,Newtonsoft.Json序列化日期时间去T的几种方式。
原文链接:https://www.muhanxue.com/essays/2015/01/8623699.html MVC web api 返回JSON的几种方式 1.在WebApiConfig的Re ...
- 对RESTful Web API的理解与设计思路
距离上一篇关于Web API的文章(如何实现RESTful Web API的身份验证)有好些时间了,在那篇文章中提到的方法是非常简单而有效的,我在实际的项目中就这么用了,代码经过一段时间的磨合,已经很 ...
- Web API返回JSON数据
对Web API新手来说,不要忽略了ApiController 在web API中,方法的返回值如果是实体的话实际上是自动返回JSON数据的例如: 他的返回值就是这样的: { "Conten ...
随机推荐
- js技巧汇总
1.window.open()打开一个子页面,在子页面关闭时刷新父页面 子页面关闭事件代码:window.opener.location.href=window.opener.location.hre ...
- 2018.10.04 NOIP模拟 排队(组合数学)
传送门 T2原题啊. 直接组合数学求出合法方案数,再除去一个(n+m)!(n+m)!(n+m)!: ans=0(n<m)ans=0(n<m)ans=0(n<m) ans=n+1−mn ...
- 2018.09.28 牛客网contest/197/B面积并(二分+简单计算几何)
传送门 比赛的时候把题目看成求面积交了,一直没调出来. 下来发现是面积并气的吐血. 码了一波发现要开long double. 然而直接用现成的三角函数会挂. 因此需要自己手写二分求角度. 大致思路就是 ...
- Django入门与实践 1-16章总结
注意事项:随时备份.随时记录.从宏观到微观 不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之:学至于行之止矣 安装 Python 3.6.2 pip install django==1.11.4 ...
- 基于图像切换器(imageSwitcher)的支持动画的图片浏览器
利用GridView和ImageSwitcher的基本用法 public class MainActivity extends Activity { int[] imageIds = new int[ ...
- Series转成list
直接list(series)就可以的 最佳的方式是将列表转换成Python中的科学计算包numpy包的array类型,再进行加减. 1 2 3 4 import numpy as np a = np. ...
- Dbutils学习(介绍和入门)
一:Dbutils是什么?(当我们很难理解一个东西的官方解释的时候,就让我们记住它的作用) Dbutils:主要是封装了JDBC的代码,简化dao层的操作. 作用:帮助java程序 ...
- hdu 5064 满足b2−b1≤b3−b2... 的最长子序列
http://acm.hdu.edu.cn/showproblem.php?pid=5064 要找出一个数组中满足b2−b1≤b3−b2≤⋯≤bt−bt−1 的最大的t 直接引题解: 1003 Fin ...
- 搜狗Q3业绩迅猛增长,战略整合稳步推进
继9月16日腾讯与搜狗战略结盟之后,最近搜狗再次吸引了业界关注的目光,10月29日,搜狗公布了截至2013年9月30日的第三季度未经审计的财务报告.财报显示,新搜狗Q3营收达5700万美元,同 ...
- Java菜鸟学习笔记()--面向对象篇(七):Wrapper Class包装类
什么是包装类? 在Java里一切都是对象,除了Java中的基本数据类型(byte,short,int,long,char,float,double,boolean)不是面向对象的,这在实际使用时存在很 ...