當前位置:首頁 » 網頁前端 » 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都能夠較好的互通。