webservice接口,webservice接口调用方式?
以下内容来自公众号:诗泽园
LESS IS MORE,SIMPLER IS BETTER THAN MORE
利用通用工具做webservice接口测试
webservice一般协议
Web service一般就是用SOAP协议通过HTTP来调用它,其实他就是一个WSDL文档,客户都可以阅读WSDL文档来用这个Web service。
SOAP简单的理解,就是这样的一个开放协议SOAP=RPC+HTTP+XML:采用HTTP作为底层通讯协议;RPC作为一致性的调用途径,XML作为数据传送的格式,允许服务提供者和服务客户经过防火墙在INTERNET进行通讯交互。
所以其实我们是可以通过http请求来测试webservice的。
工具实现
如果我们手头有python,可直接使用suds库进行webservice的调用。如果我们手头有.Net,可以直接通过引用的方式导入webservice,并创建新对象以测试webservice内的方法。如果我们手头有Java…如果我们手头只有一些测试工具,并且只能发送http请求,该怎么办?
一、使用SoapUI做一轮webservice的解析
1、输入接口地址,识别接口内方法
2、手动修改方法参数
3、尝试运行并查看返回值
二、在测试工具中配置http header,并将解析后的xml置于http请求的body中
对于接口测试平台Yapi来说:
1、更改Headers:Content-Type为test/xml类型
2、添加参数SOAPAction,类型为soap-xml
3、Body中贴入从SoapUI中生成的xml,并且可以将参数做参数化处理
4、尝试运行并查看返回值
对于Jmeter来说:
JMeter3.2前的版本,可以使用SOAP/XML-RPC Request插件直接进行webservice接口,而3.2后的版本则已经取消了这个接口,需要用现在的方法才能进行测试。请求成功后,还可按正常步骤开展性能测试。
1、同理,在HTTP Hearder Manager中做Content-Type和SOAPAction的设置
2、HTTP Request中填入接口地址及Body内容,Body内容同样来自于SoapUI
设置Header:
设置Body:
3、尝试运行并查看返回值
以上内容来自公众号:诗泽园
以上内容就是小编分享的关于webservice接口和普通接口区别.jpg”/>
网友提问:
webservice接口,webservice接口和普通接口区别?
webservice接口和restful接口哪个更好?
优质回答:
REST是一种架构风格,其核心是面向资源,遵循CRUD原则,这个原则告诉我们对于资源只需要4种行为,分别是:创建,获取,更新和删除,并且这些资源执行的操作时通过HTTP协议规定的,而WebService底层是SOAP协议,核心是面向活动,有严格的规范和标准,包括安全,事务等方面。
那么我们是使用RESTful还是WebService就需要考虑资源本身的 ,看资源本身是那种简单的类似增删改查的业务操作,还是那种比较复杂,如转账,事务处理等。其次是看是否有严格的规范和标准的,而且有多个业务系统集成和开发的时候,我们使用SOAP协议就比较优势,如果是简单的数据操作,无事务处理,开发和调用比较简单的话使用REST架构风格比较有优势,较为复杂的面向活动的服务,我们使用REST意义不大。
其他网友观点
RESTful 风格的 webservice 越来越流行了, sun 也推出了 RESTful WebService 的官方规范: JAX-RS ,全称:
Java API for RESTful WebService。该规范定义了一系列的注解
RESTful 简化了 web service 的设计,它不再需要 wsdl ,也不再需要 soap 协议,而是通过最简单的 http 协议传输数据 ( 包括 xml 或 json) 。既简化了设计,也减少了网络传输量(因为只传输代表数据的 xml 或 json ,没有额外的 xml 包装)。
下面为大家介绍使用 cxf 开发 RESTful WebService
Cxf2.7 实现了大部分的 jax -rs 规范,从 cxf3.0 开始实现 jax-rs 的全套规范
服务端
Spring3 +cxf 开发 RESTfulweb service
服务端 jar 包
上面的 jettison jar 包是用来将 jaxb 扩展为为 json 支持的 jar
实体类
com.tgb.cxf.server;import javax.xml.bind.annotation.XmlRootElement;//一定要使用XmlRootElement注解进行标注@XmlRootElement(name=”user”)public class User { private String id; private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
WebService 接口
(“/userservice/”)public interface IMyService { @Path(“/addUser/”) @POST Response addUser(User user); @Path(“/delUser/{id}/”) @DELETE Response delUser(@PathParam(“id”) String id); @Path(“/updateUser/”) @PUT Response updateUser(User user); @Path(“/getUserById/{id}/”) @GET @Produces(“application/json”)//返回json数据格式 User getUserById(@PathParam(“id”) String id); @Path(“/”) @GET @Produces(“application/json”)//返回json数据格式 List<User> findAllUsers(); }
WebService 实现类
class MyServiceImpl implements IMyService { private HashMap<String, User> users = new HashMap<String,User>(); public MyServiceImpl(){ init(); } public Response addUser(User user) { users.put(user.getId(), user); System.out.println(“添加用户成功”); System.out.println(users.size()); System.out.println(users.get(“2”).getName()); return Response.ok().build(); } public Response delUser(String id) { users.remove(id); System.out.println(users.size()); return Response.ok().build(); } public Response updateUser(User user) { users.put(user.getId(), user); System.out.println(users.get(“1”).getName()); return Response.ok().build(); } public User getUserById(String id) { return users.get(id); } private void init(){ User user = new User(); user.setId(“1”); user.setName(“温欢”); users.put(user.getId(), user); } public List<User> findAllUsers() { List<User> userlist = new ArrayList<User>(); userlist.add(users.get(“1”)); return userlist; } }
spring -cxf.xml配置文件
<beans xmlns=”http://www.springframework.org/schema/beans” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:jaxrs=”http://cxf.apache.org/jaxrs” xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd”> <!– 注意这里的jaxrs命名空间需要大家手动添加 –> <!– 发布webservice –> <bean id=”serviceBean” class=”com.tgb.cxf.server.MyServiceImpl”/> <jaxrs:server id=”userService” address=”/myservice”> <jaxrs:serviceBeans> <ref bean=”serviceBean”/> </jaxrs:serviceBeans> </jaxrs:server> </beans>
web.xml 文件配置
<web-app xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns=”http://java.sun.com/xml/ns/javaee” xmlns:web=”http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd” xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd” id=”WebApp_ID” version=”3.0″> <!– 配置spring –> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:config/spring-cxf.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!– 配置cxf servlet –> <servlet> <servlet-name>cxf</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>cxf</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> </web-app>
客户端
所需 jar 包
因为 RESTful 就是利用最原始的 http 协议传输数据,所以客户端其实就是一个 http客户端,有以下几种实现方式
JAX-RS Client API –cxf3.0+
Proxy 【使用起来简单,代理封装通信细节】
Apache HttpClient
WebClient
为了简单我使用了 Proxy 方式
代码如下
其他网友观点
Webservice有严格的规范和标准,包括安全、事务等各个方面的内容,同时强调操作方法和操作对象的分离,有WSDL文件规范;Rest强调面向资源,只要我们要操作的对象可以抽象为资源,即可以使用Rest架构风格,Rest专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性。
1.效率和易用性SOAP由于各种需求不断扩充其本身协议的内容,导致在SOAP处理方面的性能有所下降,同时在易用性以及学习成本上也有所增加;而Rest的高效一方面源于其面向资源的接口设计以及操作抽象简化了开发者的不良设计,另一方面也最大限度地利用了Http最初的应用协议设计理念。
2.安全性技术没有好坏,只有是不是合适,一种好的技术和思想被误用了,那么就会得到反效果。Rest和SOAP各自都有自己的优点,同时如果在一些场景下如果去改造Rest,其实就会走向SOAP。Rest对于资源型服务接口来说很合适,同时特别适合对于效率要求很高,但是对于安全要求不高的场景;而SOAP的成熟性可以给需要提供多开发语言的、对于安全性要求较高的接口设计带来便利。
其实,无论是哪种方式都有着它的独特之处,都有着它适合的应用场景,单纯地说什么设计模式将会占据主导地位没有什么意义。同时很重要一点就是不要扭曲了Rest,现在很多网站都跟风去开发Rest风格的接口,其实都是在学其形,不知其心,最后弄得不伦不类,性能上不去,安全又保证不了。
数通畅联专注于企业IT架构、SOA综合集成、数据治理分析领域,感谢您的阅读与关注。
其他网友观点
RESTful 是一种接口API,web service 不是接口,它是一种服务。两个概念不应该相提并论。
实践中,REST 和 SOAP 是 web services 中两个比较常见的接口 API。有时候,JSON 也被看成是其中的另外一个接口。
因此,一般人会问:作为 web services 的两个接口技术,REST 与 SOAP 那个更具有优势?
答案:
随着数据科学和人工智能的发展,尤其是访问不同数据源的需要,RESTful 接口更加强大和流行。目前看,所有数据库都支持 REST API。当然,许多企业仍然使用比较传统的 SOAP API,因为他们相信这个接口更加安全。
事实上,不存在 SOAP 比 REST 更加安全的判断,或者认为 REST 不安全的顾虑是不必要的,也是不存在的。
本质上,信息技术安全是另外一方面的技术。两个接口对安全都有相应的处理机制,都安全。相对而言,除效率高外,RESTful API 更加安全。
可以看看这个博文:
https://raygun.com/blog/soap-vs-rest-vs-json/
关于REST安全,可以看看下面博文:
https://www.netsparker.com/blog/web-security/rest-api-web-service-security/
其他网友观点
内部系统用web service 兼容性强,外部系统用restful效率高