当前位置:首页 » 网页前端 » restfulwebservice
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

restfulwebservice

发布时间: 2022-08-30 16:23:53

A. 如何用C++实现支持HTTPS的RESTful WebServer

webservice在企业应用中常常被用作不同系统之间的接口方式。但是如果没有任何安全机制的话,显然是难以委以重任的。比较直接的webservice加密方式就是使用HTTPS方式(SSL证书加密)加密连接,并且只允许持有信任证书的客户端连接,即SSL双向认证。这样就保证了连接来源的可信度以及数据在传输过程中没有被窃取或篡改。通过HTTPS加密方式访问webservice具体方法如下:【准备工作】(1)检查JDK的环境变量是否正确。本文使用JDK1.6(2)准备web服务器,这里选用TOMCAT6.0(3)准备webservice服务端和客户端。【生成证书】这里用到的文件,这里存放在D:/SSL/文件夹内,其中D:/SSL/server/内的文件是要交给服务器用的,D:/SSL/client/内的文件是要交给客户端用的。1生成服务端证书开始-运行-CMD-在dos窗口执行下执行命令:keytool-genkey-v-aliastomcat-keyalgRSA-keystoreD:/SSL/server/tomcat.keystore-dname"CN=127.0.0.1,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN"-validity3650-storepasszljzlj-keypasszljzlj说明:keytool是JDK提供的证书生成工具,所有参数的用法参见keytool–help-genkey创建新证书-v详细信息-aliastomcat以”tomcat”作为该证书的别名。这里可以根据需要修改-keyalgRSA指定算法-keystoreD:/SSL/server/tomcat.keystore保存路径及文件名-dname"CN=127.0.0.1,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN"证书发行者身份,这里的CN要与发布后的访问域名一致。但由于这里是自签证书,如果在浏览器访问,仍然会有警告提示。真正场景中建议申请CA机构(wosign)签发的SSL证书更安全。-validity3650证书有效期,单位为天-storepasszljzlj证书的存取密码-keypasszljzlj证书的私钥2生成客户端证书执行命令:keytool‐genkey‐v‐aliasclient‐keyalgRSA‐storetypePKCS12‐keystoreD:/SSL/client/client.p12‐dname"CN=client,OU=zlj,O=zlj,L=bj,ST=bj,C=CN"‐validity3650‐storepassclient‐keypassclient说明:参数说明同上。这里的-dname证书发行者身份可以和前面不同,到目前为止,这2个证书可以没有任何关系。下面要做的工作才是建立2者之间的信任关系。3导出客户端证书执行命令:keytool‐export‐aliasclient‐keystoreD:/SSL/client/client.p12‐storetypePKCS12‐storepassclient‐rfc‐fileD:/SSL/client/client.cer说明:-export执行导出-file导出文件的文件路径4把客户端证书加入服务端证书信任列表执行命令:keytool‐import‐aliasclient‐v‐fileD:/SSL/client/client.cer‐keystoreD:/SSL/server/tomcat.keystore‐storepasszljzl说明:参数说明同前。这里提供的密码是服务端证书的存取密码。5导出服务端证书执行命令:keytool-export-aliastomcat-keystoreD:/SSL/server/tomcat.keystore-storepasszljzlj-rfc-fileD:/SSL/server/tomcat.cer说明:把服务端证书导出。这里提供的密码也是服务端证书的密码。6生成客户端信任列表执行命令:keytool-import-fileD:/SSL/server/tomcat.cer-storepasszljzlj-keystoreD:/SSL/client/client.truststore-aliastomcat–noprompt说明:让客户端信任服务端证书【配置服务端为只允许HTTPS连接】1配置Tomcat目录下的/conf/server.xmlXml代码:说明:在server.xml里面这段内容本来是被注释掉的,如果想使用https的默认端口443,请修改这里的port参数。其中的clientAuth="true"指定了双向证书认证。2配置服务端项目web.xml在之后增加Xml代码:SSL/service/*/*-->SSLrequiredCONFIDENTIAL说明:这里限制了WEBservice服务地址的访问必须为https连接。要根据你的webservice服务地址配置。【修改客户端代码】在执行访问之前,增加Java代码:System.setProperty("javax.net.ssl.trustStore","D:/SSL/client/client.truststore");System.setProperty("javax.net.ssl.trustStorePassword","zljzlj");System.setProperty("javax.net.ssl.keyStoreType","PKCS12");System.setProperty("javax.net.ssl.keyStore","D:/SSL/client/client.p12");System.setProperty("javax.net.ssl.keyStorePassword","client");StringendPoint="ApplyFormService";通过设置参数来指定客户端连接时所使用的客户端证书,这里还可以采用修改JVM启动参数的的方式来执行,但出于不影响其他功能的考虑,这里采用System.setProperty的方式来设置这些参数,在使用结束后,可以还原这些参数配置。做为客户端的开发者,可以把拿到的证书文件后,只执行步骤3。

B. "SOAP WebService " 和 "RESTful WebService" 的区别和联系

SOAP(Simple Object Access Protocol)简单对象访问协议,是基于HTTP的一种异构系统通信的协议,说白了就是xml文档传输,之所以会有它,就是在于不同语言C,C++,JAVA等语言开发的系统进行通信,是WebService就是基于SOAP协议的,确实是一种比较传统的SOA解决方案。

REST(Rerepresentational State Transfer)是外国一位博士提出的一种架构风格,从资源状态转换角度看待资源,但也是基于SOAP协议进行通信。

rest 是一种风格 restful Webservice 和 soap的区别在于表现形式不一样,如果想深入了解 可以去开开 深入理解Webservice 这本书,restful Webservice 不只是可以用json 也可以用xml 更可以用html做消息返回, rest 风格的Webservice 和传统的soap 主要的表现在于 rest是将资源暴露 soap是暴露操作 。具体的流程其实和soap是一样的,但是rest更方便,更轻。

C. rest具体是怎么实现webservice的

万维网联盟指出,REST是一个如何构建Web服务的模型。REST Web是WWW(基于HTTP)的子集,其中代理提供统一的接口语义,本质上是创建,检索,更新和删除,而不是任意或特定于应用程序的接口,并且仅通过交换表示来操纵资源。那么,现在我们知道REST是什么了,作者将简要列出Roy Fielding在其论文的第五章中提到的所有约束:

  • 客户端-服务器:以这样的方式实施服务:将用户界面关注点(客户端获得可移植性)与数据存储关注点(服务器获得可伸缩性)分离开来。
  • 无状态:在客户端和服务器之间实现通信时,服务器在处理请求时永远不会利用储存在服务器上下文中的任何信息,而与会话相关的所有信息都存储在客户端中。
  • 缓存:当可以(隐式或显式)缓存请求的响应时,客户端应获取缓存的响应。
  • 统一接口:所有REST服务都应依赖组件之间相同的统一设计。接口应与提供的服务解耦。
  • 分层系统:客户端永远不知道它们是直接连接到服务器还是连接到某些中间服务器。例如,请求可以通过代理,该代理具有负载平衡或共享缓存的功能。

D. restful和webservice的怎么选

您好!一下为个人看法,希望能对您有帮助,满意的麻烦给个采纳,谢谢了!
从基本原理层次上说,REST 样式和 SOAP 样式 Web Service的区别取决于应用程序是面向资源的还是面向活动的。例如,在传统的WebService中,一个获得天气预报的webservice会暴露一个WebMethod:string GetCityWether(string city)。而RESTful WebService暴露的不是方法,而是对象(资源),通过Http GET, PUT, POST 或者 DELETE来对请求的资源进行操作。在 REST 的定义中,一个 Web Service总是使用固定的 URI 向外部世界呈现(或者说暴露)一个资源。可以说这是一种全新的思维模式:使用唯一资源定位地址 URI,加上 HTTP 请求方法从而达到对一个发布于互联网资源的唯一描述和操作。
所以我理解为rest架构定义的webservice实际上定义了一个借口的规范。
REST其实并不是什么协议也不是什么标准,而是将Http协议的设计初衷作了诠释,在Http协议被广泛利用的今天,越来越多的是将其作为传输协议,而非原先设计者所考虑的应用协议。
REST的思想归结以下有如下几个关键点:

1.面向资源的接口设计

所有的接口设计都是针对资源来设计的,也就很类似于我们的面向对象和面向过程的设计区别,只不过现在将网络上的操作实体都作为资源来看待,同时URI的设计也是体现了对于资源的定位设计。后面会提到有一些网站的API设计说是REST设计,其实是RPC-REST的混合体,并非是REST的思想。

2.抽象操作为基础的CRUD

这点很简单,Http中的get,put,www.hbbz08.com post,delete分别对应了read,update,create,delete四种操作,如果仅仅是作为对于资源的操作,抽象成为这四种已经足够了,但是对于现在的一些复杂的业务服务接口设计,可能这样的抽象未必能够满足。其实这也在后面的几个网站的API设计中暴露了这样的问题,如果要完全按照REST的思想来设计,那么适用的环境将会有限制,而非放之四海皆准的。

3.Http是应用协议而非传输协议

这点在后面各大网站的API分析中有很明显的体现,其实有些网站已经走到了SOAP的老路上,说是REST的理念设计,其实是作了一套私有的SOAP协议,因此称之为REST风格的自定义SOAP协议。

4.无状态,自包含

这点其实不仅仅是对于REST来说的,作为接口设计都需要能够做到这点,也是作为可扩展和高效性的最基本的保证,就算是使用SOAP的WebService也是一样。

E. 怎样使用ajax调用restful webservice

这里放出一些调用的例子:
1.get请求获得Category xml 数据。
$("#btncall").click(function (){
$.ajax({
url:"/restblog/services/category",
type:"GET",
dataType:'xml',
success :function (data){
var tablehtml="<table class='tableresult' border='1' bordercolor='#ccc'><tr><th>编号</th><th>名称</th></tr>";
$("category",data).each(function (i,category){
var id=$("id",category).text();
var name=$("name",category).text();
tablehtml+=("<tr><td>"+id+"</td><td>"+name+"</td></tr>");
});
tablehtml+="</table>";
$(tablehtml).appendTo("#result");
},error:function (){
alert("get category list failed!");
}});
});

jquery的ajax调用有一个参数dataType是期望得到的数据格式,目前版本的可选值为xml,json,html,jsonp.默认的是html。指定了该属性,jquery会自动解析数据格式。
上面的例子接受到的数据形如:
<?xml version="1.0" encoding="UTF-8"?>
<Categories>
<category>
<id>1</id>
<name>第一个分类</name>
</category>
<category>
<id>2</id>
<name>第二个分类</name>
</category>
</Categories>
data是一个xml对象,在没有jquery的情况下解析xml是一件很麻烦的事情。但是使用jquery,xml解析起来和html一样。
$("category",data)是查找标签名(tagName)为category节点,返回jquery对象。注意获得节点值用的是text()方法。
还得注意的地方就是url 这里的路径和请求jsp的规则是一样。
2.发送json的例子。
$("#btnAddbyjson").click(function (){
$.ajax({
url:"/restblog/services/category/add",
type:"PUT",
data:"{\"id\":1,\"name\":\"category1\"}",
contentType:'application/json',
success :function (result){
alert(result);
},error:function (){
alert("add category failed!");
}});
});

注意type: 通常的ajax调用都只是GET POST 这里用的是PUT,要回过神来。
contentType:与服务方法上的Consume 标注属性一样。在ajax调用的时候会在请求的Header添加{"contentType","application/json"}的键/值标明发送的数据格式是json。
即便发送的数据格式是json,但是真正的数据是以字符串的形式在网络传输的,所以data属性只是json的字符串,由服务器端解析成Category对象。这里的json字符串格式比较严格,不能适用单引号' ,这里要注意。
data属性即可以是字符串又可以是json,jquery会根据contentType解析成需要发送的格式。
下面的截图是在FireBug下看到的数据发送情况:

这张图旨在说明发送的数据不是一个键/值类型。区别与下面的例子。
3.POST的表单提交。
$("#btnAdd").click(function (){
$.ajax({
url:"/restblog/services/category/addbyname",
type:"POST",
data:{'categoryname':$("#txtName").val()},
success :function (result){
alert(result);
},error:function (){
alert("add category failed!");
}});
});

addbyname方法的categoryname标识为@FormParam 所以用POST提交的数据被当做Form提交的数据。下面的截图说明浏览器发送的是一个标准的键/值数据

4.调用带@Context标识参数的方法
$("#btncommonProcess").click(function (){
$.ajax({
url:"/restblog/services/category/commonProcess",
type:"GET",
data:"a=b&a=e&c=d",
success :function (result){
alert(result);
},error:function (){
alert("commonProcess failed!");
}});
});

服务端的代码见上一篇文章。
控制台上打印:
c : [d]
a : [b, e]

F. RESTful WebService和web service的区别

restful是一种架构风格,其核心是面向资源;而webService底层SOAP协议,主要核心是面向活动。

SOAP:简单对象访问协议,很轻量,同时作为应用协议可以基于多种传输协议来传递消息(Http,SMTP等)。

客户端和服务器端的通讯方式

总结:

REST对于资源型服务接口来说很合适,同时特别适合对于效率要求很高,但是对于安全要求不高的场景。而SOAP的成熟性可以给需要提供给多开发语言的,对于安全性要求较高的接口设计带来便利。所以我觉得纯粹说什么设计模式将会占据主导地位没有什么意义,关键还是看应用场景。成熟度SOAP虽然发展到现在已经脱离了初衷,但是对于异构环境服务发布和调用,以及厂商的支持都已经达到了较为成熟的情况。不同平台,开发语言之间通过SOAP来交互的web service都能够较好的互通。

G. 如何 调用 restful web services

RESTful WebService是比基于SOAP消息的WebService简单的多的一种轻量级Web服务,RESTful WebService是没有状态的,发布和调用都非常的轻松容易。

下面写一个最简单的Hello World例子,以便对RESTful WebService有个感性认识。因为非常专业理论化的描述RESTful WebService是一件理解起来很痛苦的事情。看看例子就知道个大概了,再看理论就容易理解多了。

/**
* RESTful WebService入门
* @author leimin 2009-11-18 16:42:43
*/
packageexample;

importcom.sun.jersey.api.container.httpserver.HttpServerFactory;
importcom.sun.net.httpserver.HttpServer;

importjavax.ws.rs.GET;
importjavax.ws.rs.Path;
importjavax.ws.rs.Proces;
importjava.io.IOException;

//指定URI
@Path("/helloworld")
publicclassHelloWorld {
//处理HTTP的GET请求
@GET
// 处理请求反馈的内容格式为"text/plain"
@Proces("text/plain")
publicString getClichedMessage() {
return"Hello World!";
}

publicstaticvoidmain(String[] args)throwsIOException {
//创建RESTful WebService服务
HttpServer server = HttpServerFactory.create("http://192.168.14.117:9999/");
//启动服务,这会导致新开一个线程
server.start();
//输出服务的一些提示信息到控制台
System.out.println("RESTful WebService服务已经启动");
System.out.println("服务访问地址: http://192.168.14.117:9999/helloworld");
}
}

运行这个类,控制台输入出:

2009-11-18 17:25:37 com.sun.jersey.api.core.ClasspathResourceConfig init
信息: Scanningforroot resource and provider classes in the paths:
D:jdk16jrelibalt-rt.jar
D:jdk16jrelibcharsets.jar
D:jdk16jrelibdeploy.jar
D:jdk16jrelibjavaws.jar
D:jdk16jrelibjce.jar
D:jdk16jrelibjsse.jar
D:jdk16jrelibmanagement-agent.jar
D:jdk16jrelibplugin.jar
D:jdk16jrelib esources.jar
D:jdk16jrelib t.jar
D:jdk16jrelibextdnsns.jar
D:jdk16jrelibextlocaledata.jar
D:jdk16jrelibextsunjce_provider.jar
D:jdk16jrelibextsunmscapi.jar
D:jdk16jrelibextsunpkcs11.jar
D: etwideo estwsoutproction estws
D:IDEA8libjavaee.jar
D: etwideo estwslibmail-1.4.jar
D: etwideo estwslibasm-3.1.jar
D: etwideo estwslibwadl2java.jar
D: etwideo estwslibjettison-1.0.1.jar
D: etwideo estwslibgrizzly-servlet-webserver-1.8.6.4.jar
D: etwideo estwslibwadl-core.jar
D: etwideo estwsliblocalizer.jar
D: etwideo estwslibjdom-1.0.jar
D: etwideo estwslibjsr311-api-1.0.jar
D: etwideo estwslibstax-api-1.0-2.jar
D: etwideo estwslibpersistence-api-1.0.2.jar
D: etwideo estwslibjaxb-api-2.1.jar
D: etwideo estwslibwadl-cmdline.jar
D: etwideo estwslibhttp-20070405.jar
D: etwideo estwslib ome-0.9.jar
D: etwideo estwslibactivation-1.1.jar
D: etwideo estwslibjaxb-impl-2.1.10.jar
D: etwideo estwslibjersey-bundle-1.0.3.jar
D: etwideo estwslibjackson-lgpl-0.9.4.jar
D: etwideo estwslibFastInfoset-1.2.2.jar
D: etwideo estwslibjaxb-xjc.jar
D:IDEA8libidea_rt.jar
2009-11-18 17:25:46 com.sun.jersey.api.core.ClasspathResourceConfig init
信息: Root resource classes found:
classexample.HelloWorld
2009-11-18 17:25:46 com.sun.jersey.api.core.ClasspathResourceConfig init
信息: Provider classes found:
RESTful WebService服务已经启动
服务访问地址:http://192.168.14.117:9999/helloworld

可见,服务启动成功了,下来就是从浏览器中访问服务了,输入http://192.168.14.117:9999/helloworld,将发送一个HTTP GET请求,看看结果:

测试成功了!

H. springmvc实现的restful api 和cxf实现的restful webservice有什么区别与联系

springmvc实现的restful api 和cxf实现的restful webservice的区别是方法不一样,但是效果都是相同的,随便用哪一个、

I. c#调用restful风格的java WebService 例子

restful那就是普通的get或者post请求了(该用post还是get取决于接口的设置),你网络搜索一下 c# post get ,第一个就是,至于java中取ip就是普通的网页上取ip的方法,即request.getRemoteAddr

J. webservice和restful的区别

restful是一种架构风格,其核心是面向资源;而webService底层SOAP协议,主要核心是面向活动。

SOAP:简单对象访问协议,很轻量,同时作为应用协议可以基于多种传输协议来传递消息(Http,SMTP等)。

客户端和服务器端的通讯方式

总结:

REST对于资源型服务接口来说很合适,同时特别适合对于效率要求很高,但是对于安全要求不高的场景。而SOAP的成熟性可以给需要提供给多开发语言的,对于安全性要求较高的接口设计带来便利。所以我觉得纯粹说什么设计模式将会占据主导地位没有什么意义,关键还是看应用场景。

成熟度
SOAP虽然发展到现在已经脱离了初衷,但是对于异构环境服务发布和调用,以及厂商的支持都已经达到了较为成熟的情况。不同平台,开发语言之间通过SOAP来交互的web service都能够较好的互通。