浅谈web api和Webservice

Posted 玉老虎

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈web api和Webservice相关的知识,希望对你有一定的参考价值。

浅谈web api和Webservice

	webapi用的是http协议,webservice用的是soap协议 
	webapi无状态,相对webservice更轻量级。webapi支持如get,post等http操作

一、Web Api

Web Api是什么?

Web Api,网络应用程序接口。它包含了广泛的功能,网络应用通过API接口,可以实现存储服务、消息服务、计算服务的能力,利用这些能力可以进行开发出强大功能的web应用。简单来说,就是一个接口,比如说,我们要做前后端分离的项目,前端和后端通过url连接,但是我们如何知道后端的数据是否通了,返回的数据是否正确,于是我们通过这个接口知道。

1.特点

webapi用的是http协议,webservice用的是soap协议
webapi无状态,相对webservice更轻量级。webapi支持如get,post等http操作
http:是一个客户端和服务器端请求和应答的标准(TCP)。http协议其目的是为了提供一种发布和接收htttp页面的方法一http协议的客户端与服务器的交互:由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如”HTTP/1.1 200 OK”,和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。

1 是简单的 构建HTTP服务的新框架
2 在.net平台上WebApi是一个开源的,理想的,构建REST-FUL服务的技术
3 不想WCF REST Server 它可以使用HTTP的全部特点(URI,request/response头,缓存,版本控制,多种内容格式)
4 支持MVC的特征。像路由、控制器、action、filter、模型绑定、控制反转(IOC)或依赖注入(DI),单元测试。
4 可以部署在IIS和应用程序上
6 轻量级框架,并且对限制带宽的设备,比如智能手机等支持的很好
7、Response可以被Web API的MediaTypeFormatter转换成Json、XML 或者任何你想转换的格式。
8、Web API非常适合构建移动客户端服务

二、Web service

Web service定义:

Web service是一个平台独立的,松耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。

1.特点

它描述了一种在分散或分布式的环境中如何交换信息的轻量级协议。soap在http协议的基础上,一个基于XML的协议。
SOAP:Simple Object Access Protocol 简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。

1 基于SOAP协议的,数据格式为XML
2 只支持HTTP协议
3 不是开源的,但可以被任意一个了解XML的人使用
4 只能部署在IIS上

SOAP :简单对象访问协议Simple Object Access Protocol,传输层 ,,XML传输消息
WSDL:Web Server Description Language :Web Server描述语言(元数据),给客户端生成代理类的一个描述信息
UDDI :提供了一组基于标准的规范用于描述和发现服务,统一描述,发现和集成(UDDI-Universal Descript,Discovery,Integration),提供注册和查找服务
客户端在UDDI注册表(Registry)查找服务,取得服务的WSDL描述,通过SOAP调用服务。

WEB API与Web service的抉择

以下情况可以考虑用Web API
1、 需要Web Service但是不需要SOAP
2、 需要在已有的WCF服务基础上建立non-soap-based http服务
3、 只想发布一些简单的Http服务,不想使用相对复杂的WCF配置
4、 发布的服务可能会被带宽受限的设备访问
5、 希望使用开源框架,关键时候可以自己调试或者自定义一下框架
6、如果服务需要在http协议上,并且希望利用http协议的各种功能
7、如果服务需要被各种客户端(特别是移动客户端)调用

webapi多用于基于http请求的服务应用,比如说移动服务端或者需要提供第三方API 服务的场景下
webservice也可以应用于webapi所在的场景,一般是做为内部服务的使用,好比如果一个系统用wcf/webservice作为内部子系统间的服务通信,而webapi用于外部服务的请求。

WCF和WEB API我该选择哪个?
  1、当你想创建一个支持消息、消息队列、双工通信的服务时,你应该选择WCF
  2、当你想创建一个服务,可以用更快速的传输通道时,像TCP、Named Pipes或者甚至是UDP(在WCF4.5中),在其他传输通道不可用的时候也可以支持HTTP。
  3、当你想创建一个基于HTTP的面向资源的服务并且可以使用HTTP的全部特征时(比如URIs、request/response头,缓存,版本控制,多种内容格式),你应该选择Web API
  4、当你想让你的服务用于浏览器、手机、iPhone和平板电脑时,你应该选择Web API

[WEB API ]ASP.NET CORE WEB API 调用WebService数据

不同的系统之间经常会需要数据的交换对接,而Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。(百度百科);

   使用ABP.NET 框架调用客户提供的数据,简单的记录一下过程;

1、在依赖项添加引用服务

2、填写webservice地址 然后点击转到

3、引用服务成功后

4、调用webservice里面的方法获得数据并解析

// 创建 HTTP 绑定对象
                var binding = new BasicHttpBinding();
                //最大获取数据
                binding.MaxReceivedMessageSize = 2147483647;
                // 根据 WebService 的 URL 构建终端点对象,参数是提供的WebService地址
                var endpoint = new EndpointAddress(@"http://00.000.002.09/00/00/00.asmx");
                // 创建调用接口的工厂,注意这里泛型只能传入接口 泛型接口里面的参数是WebService里面定义的类名+Soap
                var factory = new ChannelFactory<ReadMESSoap>(binding, endpoint); 
                // 从工厂获取具体的调用实例
                var callClient = factory.CreateChannel();// 调用具体的方法,这里是 GetUserTimeBySQLAsync 方法 这一步就能获得数据了。  我这里拿到的是ArrayOfXElement 数据
                var result = await callClient.GetUserTimeBySQLAsync("where name='林小强'");
                //创建List集合
                List<SwipeCardData> CardDataList = new List<SwipeCardData>();
                //返回是xelement的集合,首先获得真正的表的节点。使用Nodes.Descendants("Table"),获得指定标签,然后foreach遍历 解析
                foreach (XElement el in result.Nodes.Descendants("Table"))
                
                    SwipeCardData CardData = new SwipeCardData();
                    //根据节点循环赋值给SwipeCardData类
                    foreach (XElement ell in el.Nodes())
                    
                        switch (Convert.ToString(ell.Name))
                        
                            case "LineID":
                                CardData.ProcessID = Convert.ToInt32(ell.Value);
                                break;
                            case "LineDesc":
                                CardData.ProcessName = ell.Value;
                                break;
                            case "StationID":
                                CardData.StationID = Convert.ToInt32(ell.Value);
                                break;
                            case "StationDesc":
                                CardData.StationNmae = ell.Value;
                                break;
                            case "UserID":
                                CardData.EmployeeNum = ell.Value;
                                break;
                            case "UserName":
                                CardData.EmployeeName = ell.Value;
                                break;
                            case "StatusDesc":
                                CardData.type = ell.Value;
                                break;
                            case "RecordTime":
                                CardData.AtWork = Convert.ToDateTime(ell.Value).ToString("yyyy-MM-dd HH:mm:ss.fff");
                                break;
                            case "ID":
                                CardData.Id = Guid.NewGuid();
                                break;
                            default:
                                break;
                        
                    
                    //将转换后的数据 添加到我设定属性的数组中
                    CardDataList.Add(CardData);
                

以上是关于浅谈web api和Webservice的主要内容,如果未能解决你的问题,请参考以下文章

浅谈使用 PHP 进行手机 APP 开发(API 接口开发)

浅谈微服务架构下的API网关

应用安全浅谈Linux系统Apache安全配置

布道 API浅谈 API 设计风格

WebService

浅谈 Python 的模块导入