Web篇--java编写接口为外部提供服务技术选择

在java中,开发数据接口为外部提供服务是很正常的事情,可是在选择技术上犯了难。

我了解的编写接口的方式有:

  1. socket编程
  2. servlet
  3. webservice
  4. http+json

对于上面的四种方式,基本上都能实现我目前的项目需求,可是我就是想知道用哪一个最合适,因此根据查阅资料以及自己的理解记录下自己的看法。

一.Socket编程

    对于大多数web开发者来说,socket应该是比较陌生的(虽然作为java基础),java对于网络编程是非常支持的一门语言,许多人说socket其实就是作为java针对网络编程的利剑。其所属网络七层协议的传输层,主要有TCP/UDP协议。其实我对于网络这个什么什么协议是不太懂的,自己理解“协议”就是一种规范,就像规定我这个传输就得使用xml文件,头部第一字母就是什么样的这种。

       至于TCP建立连接进行三次握手四次挥手的这种东西这里就不重复讲解,提示下了解一下TCP中的滑动窗口比较有用。

       我知道Socket编程是比较底层,他通过写入流和输出流来获取传输数据,传输数据为字节级,传输数据可自定义。我在开发过程中,最明显的感觉就是越底层的东西就越需要我们的水平高一些。例如像在开发webservice时,只需要几个注解服务就发出去了。而Socket编程我们首先需要指定服务的地址以及端口号,然后服务端监听指定端口,在接收请求后我们还需要考虑请求的并发问题以及何时关闭连接和返回数据问题。客户端同样有这些端口地址问题,因此开发过程中还是比较复杂。所谓传输层,定义了底层数据传输的要求和约定,而剩下的那三种方式则是基于HTTP协议,HTTP协议是简单的文本传输协议,在这一点上我们就知道复杂程度肯定降低。

最后总结下Socket编程的有点和适用场景:

  1. 传输数据为字节级,传输数据可自定义,数据量小。相应的移动端开发,手机费用低
  2. 传输数据时间短,性能高
  3. 适合C/S之间信息实时交互
  4. 可以加密,数据安全性高
  5. Socket适用场景:网络游戏,银行交互,支付。
  6. 注意Socket是跨语言的

二.HTTP协议

下面这三种方式都是采用HTTP方式,而HTTP协议是基于TCP协议的。而HTTP是在应用层的,所谓应用层就是为我们做的一些事情提供方便。例如我们使用http协议请求,我们通过互联网请求服务器部署的项目,只需要地址就能拿到我们想要的数据或者html页面。而HTTP协议中定义的Get/Put/Post/Delete都是为了方便我们这种请求而添加在协议中的内容,在TCP中是没有这些的,但是最终的传世都是离不开传输层TCP协议的最底层的部分,就像GET请求,也许http协议将这样的请求规定将地址和数据写在一起。说到这里可能有些明白了,其实顶层协议许多都是底层协议的优化,添加了我们日常的需求或者大量应用的东西。

这个时候我们知道了HTTP的相关资料,它封装了一些请求方法以及返回数据类型格式。同时也规范了请求头等信息,下面针对该类特征进行下面三种方式讲解。

三.servlet

servlet首先是java独有的技术,其次使用servlet必须使用web容器。就像运行java需要JVM一样,使用Servlet需要java中间件,例如tomcat/weblogic/jboss等。

Servlet是Java对于Web开发而产生的一项技术,可以说Servlet技术是Java专有的,它是服务器端的技术,客户端通常是浏览器,Servlet提供了请求/响应模式,是JAVA的一种规范,只能使用于Java上,用来替代早期使用的难懂的CGI,是一种无状态的请求响应,客户端访问一个服务器的url,只需要发送简单的httprequest即可。规定了四个范围:pageContext、request、session、application。一定依赖于各种Servlet容器,但Servlet只能接受一个简单的http请求。

Servlet使用Http协议传输数据,如果你用Servlet返回XML,那个XML的描述框架就是你定的,必须告知使用者具体的说明,没有统一标准。我们常常使用servlet在前端后端在一起的项目里,前端请求,后端可以跳转页面,返回各种格式字符串或者页面等。典型就是springmvc这种封装了servlet的框架。

总的来说:Servlet定义的是一套服务于Java Web开发接口,目的是实现Java Web的动态访问。并且因为依赖java语言,所以不具备跨语言特性。但是足以满足java应用的数据接口调用。

四.webservice

这个比较重量了,他是使用基于http协议的soap协议进行传输的,可能有人要说了,怎么又来新协议了,我也不想啊,因为新协议可能就意味着定义了新功能,所以又要遵循了。那么soap协议主要约定什么了呢?首先就是webservice传输数据使用xml进行数据传输,你前面那个使用字符串啊、字节啊等等这些在这都不行了,只能xml传输,而且返回也是xml,至于这个xml中写了什么,没错就是服务端发布的接口信息啊,参数信息啊,你请求的信息啊,请求的数据复杂不复杂啊这些东西。而且这个xml文件有个英文名:WSDL:webservice 描述语言。他是跨语言的,就是说各种语言都可以使用客户请求这个服务接口,毕竟你什么语言都用xml吧,

Webservice使用固定的XML格式封装成soap消息,可以使用Http作为底层数据传输,但并不局限于Http协议,方法返回消息是有标准的。 Web Service的优点在于可以传递对象(其实是结构化的数据),从而对异构系统来说更有优势。

现在大多数系统可能编写接口都是用这个技术了,随着技术的发展现在也使用restful风格的webservice了,可以通过注解就实现许多繁琐的编写了,因此该方式适合稳定.跨语言的接口服务。缺点也很明显,你想想服务端接口信息啥的都放xml里面了,数据够大了吧,然后还有双方都要解析,时间更多了吧,对于不是即时通讯,此种方法还是推荐。

因为WebService要经过两次序列化,所以导致其传输速度慢,适用于没有性能要求且数据传输量小的场景,推荐在公开接口上使用WebService。

五.http+json

此种方式和servlet方式比较相似,都是使用http进行请求,然后返回指定的json格式字符串,该种方式貌似不支持跨域,只适合内网之间的数据调用,因此该种接口局限性很大。

总结:

socket使用的话你的编程水平要牛逼,而且这玩意传输快,传输量大,废话不多而且跨语言

servlet不跨语言,只是java使用,传输数据格式多样,适合本地前端后端交互(项目是不分离的)

webservice:跨语言,适用于对外部发布服务,对性能要求不高的项目适合。可以传输复杂数据(对象等),不易读,需要客户端解析xml

http+json:简单明了,格式易读,同样有不跨域无法跨语言的特性。

 

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值