在企业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格式设计思考(原创)的更多相关文章

  1. Web API删除JSON格式的文件记录

    Insus.NET的系列Web Api学习文章,这篇算是计划中最后一篇了,删除JSON格式的文件记录.前一篇<Web Api其中的PUT功能演示>http://www.cnblogs.co ...

  2. .Net MVC 4 Web Api 输出Json 格式

    1.Global 中增加json输出 GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add( ...

  3. [Web API] 如何让 Web API 统一回传格式以及例外处理[转]

    [Web API] 如何让 Web API 统一回传格式以及例外处理 前言 当我们在开发 Web API 时,一般的情况下每个 API 回传的数据型态或格式都不尽相同,如果你的项目从头到尾都是由你一个 ...

  4. [Web API] 如何让 Web API 统一回传格式以及例外处理

    [Web API] 如何让 Web API 统一回传格式以及例外处理 前言 当我们在开发 Web API 时,一般的情况下每个 API 回传的数据型态或格式都不尽相同,如果你的项目从头到尾都是由你一个 ...

  5. Web API核查表:设计、测试、发布API时需思考的43件事[转]

    Web API核查表:设计.测试.发布API时需思考的43件事   当设计.测试或发布一个新的Web API时,你是在一个原有的复杂系统上构建新的系统.那么至少,你也要建立在HTTP上,而HTTP则是 ...

  6. .net mvc web api 返回 json 内容,过滤值为null的属性

    原文:http://blog.csdn.net/xxj_jing/article/details/49508557 版权声明:本文为博主原创文章,未经博主允许不得转载. .net mvc web ap ...

  7. MVC web api 返回JSON的几种方式,Newtonsoft.Json序列化日期时间去T的几种方式。

    原文链接:https://www.muhanxue.com/essays/2015/01/8623699.html MVC web api 返回JSON的几种方式 1.在WebApiConfig的Re ...

  8. 对RESTful Web API的理解与设计思路

    距离上一篇关于Web API的文章(如何实现RESTful Web API的身份验证)有好些时间了,在那篇文章中提到的方法是非常简单而有效的,我在实际的项目中就这么用了,代码经过一段时间的磨合,已经很 ...

  9. Web API返回JSON数据

    对Web API新手来说,不要忽略了ApiController 在web API中,方法的返回值如果是实体的话实际上是自动返回JSON数据的例如: 他的返回值就是这样的: { "Conten ...

随机推荐

  1. a标签的四个伪类

    A标签的css样式   CSS为一些特殊效果准备了特定的工具,我们称之为“伪类”.其中有几项是我们经常用到的,下面我们就详细介绍一下经常用于定义链接样式的四个伪类,它们分别是: :link    :v ...

  2. VS2010 MFC对话框程序用CButtonST给按钮添加图标

    也许是VS版本的关系,CButtonST中的BCMenu两个文件是无法编译通过的.   1.拷贝下载的CButtonST(我下载的v3.9)中的BtnST.h和BtnST.cpp文件到自己项目目录下. ...

  3. Determine overlapping rectangles

    https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Moc ...

  4. 实体类在set字段时报空指针异常

    实体类在set字段时报空指针异常的原因: T_Entry entry=null;entry.setGeneName("1212");entry.setEntryName(" ...

  5. 2018.09.27 bzoj2510: 弱题(概率dp+循环矩阵优化)

    传送门 简单概率dp. 显然每次转移的式子可以用一个矩阵表示出来: 这个是循环矩阵. 因此只用维护第一行快速幂一波就行了. 代码: #include<bits/stdc++.h> #def ...

  6. 21 Survival of Desert Life 沙漠生命的延续

    Survival of Desert Life 沙漠生命的延续 ① Some desert animals can survive the very strong summer heat and dr ...

  7. 如何设置vim中tab键缩进---配置初始化设置

    转载自:http://blog.51cto.com/xuding/1725376:加了一些补充说明 问题: Linux系统下,Tab键默认为8个字符,需呀将其修改为4个字符的方式使用 步骤: 1.在用 ...

  8. 极小极大搜索方法、负值最大算法和Alpha-Beta搜索方法

    1. 极小极大搜索方法    一般应用在博弈搜索中,比如:围棋,五子棋,象棋等.结果有三种可能:胜利.失败和平局.暴力搜索,如果想通过暴力搜索,把最终的结果得到的话,搜索树的深度太大了,机器不能满足, ...

  9. java梳理-序列化与反序列化

    一背景: 之前笔记关于rpc框架介绍中,提到为了调用远程服务,需要再确定消息结构后考虑序列化与反序列化,序列化主要是把对象转换成二进制码便于网络传输,反序列化就是相反的,主要目的是生成对象便于后续处理 ...

  10. visual studio 2015 rc &cordova -hello world

    初始环境,用来看看书,电影,上上网的win8,所以一切从头开始. 1,首先还是装visual studio 2015  rc吧,目前只放出在线安装,所以要很长很长时间.不过有新闻说很快要实现中国网友至 ...