您好,登錄后才能下訂單哦!
ServiceStack框架提供三種模式的服務接口實現(xiàn), REST 、Client 以及和WCF相兼容的SOAP WebService ,這三種模式統(tǒng)稱WebService,目前對于移動平臺和云服務火爆的情形下,最為普及的是REST模式。
WebService常用連接模式:
REST | Client | SOAP WebService |
在不同模式下,可以使用不同的數(shù)據(jù)(流)格式,最為常用的是XML 、JSON , 主要使用在REST模式下,此外還支持JSV, CSV 以及SOAP格式的數(shù)據(jù)。
XML | JSON | JSV | CSV | SOAP |
在前文中提到啟動服務(SS項目),這種服務是一種×××面的,對外僅提供數(shù)據(jù)服務,通過一套自定義的API訪問,在大型網(wǎng)站廣為使用,比如微信、微博、淘寶及人人網(wǎng)、各種網(wǎng)盤開發(fā)API等。
SS中,客戶端連接到服務端的方式主要有兩種,通過REST方式或者Client方式,初始化客戶端是相同的 :
var service = new JsvServiceClient("http://localhost:2790/");
通過REST方式訪問服務:
var storyResponses = service.Post<List<NewsResponse>>("newslist", new NewsAll() { cid=0 });
其中service.后邊的Post為HTTP指令,接下來要詳細說明,NewsAll()為入口類,NewsResponse為出口類,使用時結(jié)構(gòu)為:
HTTP 指令 | 出口類 | ("路由" | 入口類{ 傳入?yún)?shù) } | ) |
通過Client方式訪問服務:
service.Send<SubmissionResponse>(new Submission() { Body = news.Text, Headline = news.Headline, SubmissionTime = news.Date });
Client模式的標志是使用Send函數(shù) ,使用結(jié)構(gòu)為:
Send | 出口類 | ( | 入口類{ 傳入?yún)?shù) } | ) |
注意客戶端 模式是不使用路由的,它的執(zhí)行方式很類似軟件中使用Socket連接模式,使用比HTTP協(xié)議更底層的高速數(shù)據(jù)通道來傳輸數(shù)據(jù)。
一般來說客戶端模式是比REST模式效率要高,但在服務端和客戶端同時都使用了SS的情況下,框架會在內(nèi)部自動將其都轉(zhuǎn)換為客戶端模式(可以支持二進制傳輸、文件上傳下載等),所以使用REST模式和 使用客戶端模式的差異并不大,具體使用哪種方式可以根據(jù)自己的習慣和喜好使用。
下面說一下HTTP指令, 又稱HTTP verb(HTTP動詞),我們通常訪問網(wǎng)站數(shù)據(jù)的方式有GET和POST,用于指定獲取數(shù)據(jù)和交流的方式,它是被附加在HTTP的request請求上的,包含于HTTP頭中(可以使用HTTP傳輸工具查看),使用了REST模式后,可以使用全套的HTTP指令,常用的有除了GET和POST,還有PUT、DELETE和PATCH、TRACE。
HTTP指令在HTTP頭中通常所有字母全部大寫。
GET用于獲取數(shù)據(jù)操作,傳遞的參數(shù)通常是附加在URL上,數(shù)據(jù)大小限制一般為1-16k,可以返回單條或列表數(shù)據(jù);
POST用于獲取、提交、文件上傳等操作,傳遞的參數(shù)或數(shù)據(jù)通常使用表單提交,可以為文本也可以為二進制數(shù)據(jù),二進制方式可以用于文件、圖片上傳,并且可自定義文件類型,POST提交的返回數(shù)據(jù)通常是狀態(tài)信息,比如操作是否成功,操作得到的ID、記錄條數(shù)等,而且通常會根據(jù)返回的狀態(tài)信息執(zhí)行跳轉(zhuǎn)或處理異常等操作。在使用POST對REST模式的服務中,常用的是將其數(shù)據(jù)使用Insert語句保存到數(shù)據(jù)庫。
PUT用于更新數(shù)據(jù)操作,通常在REST模式下,將其數(shù)據(jù)使用Update語句更新到數(shù)據(jù)庫。
DELETE用于刪除操作,在REST模式下,可以使用兩種方式執(zhí)行刪除,一個方式是傳遞一個對象到服務,比如一個order訂單對象(里邊實際有效的僅僅是id字段),另一種方式傳遞一個id或一組id,執(zhí)行數(shù)據(jù)庫的刪除操作。
PATCH用于追加模式更新數(shù)據(jù)。
TRACE回顯提交的數(shù)據(jù),可以用于調(diào)試以及查看服務端數(shù)據(jù)的變更。
附 : ServiceStack 內(nèi)置的 客戶端實現(xiàn),從中也可以看出無論REST還是客戶端都是使用同樣的類庫: 未翻譯
implements both IRestClient
and IServiceClient
:
JsonServiceClient (uses default endpoint with JSON) - recommended
JsvServiceClient (uses default endpoint with JSV)
XmlServiceClient (uses default endpoint with XML)
MsgPackServiceClient (uses default endpoint with Message-Pack)
ProtoBufServiceClient (uses default endpoint with Protocol Buffers)
implements IServiceClient
only:
Soap11ServiceClient (uses SOAP 11 endpoint)
Soap12ServiceClient (uses SOAP 12 endpoint)
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。