一个基于XML的传输协议解析

前端之家收集整理的这篇文章主要介绍了一个基于XML的传输协议解析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1、背景介绍

在涉及到网络请求的场景中,网络协议是必不可少的组件。但是针对不同的应用程序,网络协议又大不相同。一般来说,不涉及到资金操作的网络请求,并不需要做过多的协议处理,一般常见的数据结构就可以了。但是在一些特定的场合,比如说购物,涉密文件信息这样的信息在传送的时候,一定要有特殊的协议去传送。

这里简单介绍一个购物时候,使用到的一个协议的封装。


2、发送协议

我们先看看发送协议的文件,如下XML文件

  1. <?xml version=”1.0 encoding=”utf-8”?>
  2. <product version="1.2">
  3. <header>
  4. <agenterid>568941</agenterid>
  5. <source>ivr</source>
  6. <compress>DES</compress>
  7. <messengerid>201411131045215896412</messengerid>
  8. <timestamp>20141113104521</timestamp>
  9. <digest>7ec8582632678032d25866bd4bce114f</digest>
  10.  
  11. <transactiontype>287910</transactiontype>
  12. <username>78145652515141</username>
  13. </header>
  14. <body>
  15. <elements>
  16. <element>
  17. <chooseid>10</chooseid>
  18. <issues>2</issues>
  19. </element>
  20. </elements>
  21. </body>
  22. </product>

这是选中商品的协议,可以看到分为两个部分,header头部和body正文部分。


3、协议解析

3.1 解析图示

在上面,我们看到协议的明文示例,那么根据上面的xml文件,我们可以整理出如下的解析图示:


3.2 常量分析

<agenterid>568941</agenterid>
agenterid:代理id
<source>ivr</source>
<compress>DES</compress>
body里面的数据加密的算法


3.3 简单代码处理

<timestamp>20141113104521</timestamp>
时间戳:SimpleDataformat
<messengerid>201411131045215896412</messengerid>
时间戳+六位的随机
SimpleDataformat+Random+六位(数字的格式化DecimalFormat)
<digest>7ec8582632678032d25866bd4bce114f</digest>
数据摘要:MD5
MD5的原始数据的组成:时间戳+代理的密码+完整body(明文)


3.4 无法处理

<transactiontype>287910</transactiontype>
请求的唯一的标示
<username>78145652515141</username>
用户名自动登录


4、接收协议

有了上面协议的分析基础,我们这里就直接给出接收协议的xml明文,不再过多解释其中的含义。接收协议的明文也是一个xml文件定义:

  1. <?xml version='1.0' encoding='utf-8' ?>
  2. <product version="1.2">
  3. <header>
  4. <messengerid>201411131045215896412</messengerid>
  5. <timestamp>20141113104521</timestamp>
  6. <transactiontype>12002</transactiontype>
  7. <digest>7ec8582632678032d25866bd4bce114f</digest>
  8. <compress>DES</compress>
  9. <agenterid>568941</agenterid>
  10. </header>
  11. <body>
  12. <oelement>
  13. <errorcode>0</errorcode>
  14. <errormsg>操作成功</errormsg>
  15. </oelement>
  16. <elements>
  17. <element>
  18. <chooseid>10</chooseid>
  19. <choosename>茶叶</choosename>
  20. <issue>2012070</issue>
  21. <lasttime>86400</lasttime>
  22. </element>
  23. </elements>
  24. </body>
  25. </product>

5、协议解析总结

在做协议封装的时候,一般只需要封装关键的信息,一些常量或者说一些简单的数据,并没有太大的封装意义,比如上面这条消息的id值,时间戳就没有太大的封装意义,但是选中的商品信息,商品的数量信息,这类敏感型数据,应当做一个加密的操作。

在协议的封装过程中,我们应该在前期的设计中,考虑到协议的可扩展性,比如上面的elements这样的一个节点,里面好像也只有一个element元素,那么外层的elements节点似乎就很多于。实际上呢?我们这里只是给出了一个示例而已,这里用户仅仅是选择了茶叶这样一个元素,那么试想一下,在购买商品的时候,用户购买了多个商品,我们又该如何处理这个协议呢?

猜你在找的XML相关文章