ServiceStack框架提供三種模式的服務接口實現, REST 、Client 以及和WCF相兼容的SOAP WebService ,這三種模式統稱WebService,目前對於移動平臺和雲服務火爆的情形下,最爲普及的是REST模式。git
WebService經常使用鏈接模式:github
REST | Client | SOAP WebService |
在不一樣模式下,可使用不一樣的數據(流)格式,最爲經常使用的是XML 、JSON , 主要使用在REST模式下,此外還支持JSV, CSV 以及SOAP格式的數據。數據庫
XML | JSON | JSV | CSV | SOAP |
在前文中提到啓動服務(SS項目),這種服務是一種無界面的,對外僅提供數據服務,經過一套自定義的API訪問,在大型網站廣爲使用,好比微信、微博、淘寶及人人網、各類網盤開發API等。微信
SS中,客戶端鏈接到服務端的方式主要有兩種,經過REST方式或者Client方式,初始化客戶端是相同的 :框架
1函數 |
|
經過REST方式訪問服務:網站
1spa 2翻譯 |
|
其中service.後邊的Post爲HTTP指令,接下來要詳細說明,NewsAll()爲入口類,NewsResponse爲出口類,使用時結構爲:
HTTP 指令 | 出口類 | ("路由" | 入口類{ 傳入參數 } | ) |
經過Client方式訪問服務:
1 2 3 4 5 6 |
|
Client模式的標誌是使用Send函數 ,使用結構爲:
Send | 出口類 | ( | 入口類{ 傳入參數 } | ) |
注意客戶端 模式是不使用路由的,它的執行方式很相似軟件中使用Socket鏈接模式,使用比HTTP協議更底層的高速數據通道來傳輸數據。
通常來講客戶端模式是比REST模式效率要高,但在服務端和客戶端同時都使用了SS的狀況下,框架會在內部自動將其都轉換爲客戶端模式(能夠支持二進制傳輸、文件上傳下載等),因此使用REST模式和 使用客戶端模式的差別並不大,具體使用哪一種方式能夠根據本身的習慣和喜愛使用。
下面說一下HTTP指令, 又稱HTTP verb(HTTP動詞),咱們一般訪問網站數據的方式有GET和POST,用於指定獲取數據和交流的方式,它是被附加在HTTP的request請求上的,包含於HTTP頭中(可使用HTTP傳輸工具查看),使用了REST模式後,可使用全套的HTTP指令,經常使用的有除了GET和POST,還有PUT、DELETE和PATCH、TRACE。
HTTP指令在HTTP頭中一般全部字母所有大寫。
GET用於獲取數據操做,傳遞的參數一般是附加在URL上,數據大小限制通常爲1-16k,能夠返回單條或列表數據;
POST用於獲取、提交、文件上傳等操做,傳遞的參數或數據一般使用表單提交,能夠爲文本也能夠爲二進制數據,二進制方式能夠用於文件、圖片上傳,而且可自定義文件類型,POST提交的返回數據一般是狀態信息,好比操做是否成功,操做獲得的ID、記錄條數等,並且一般會根據返回的狀態信息執行跳轉或處理異常等操做。在使用POST對REST模式的服務中,經常使用的是將其數據使用Insert語句保存到數據庫。
PUT用於更新數據操做,一般在REST模式下,將其數據使用Update語句更新到數據庫。
DELETE用於刪除操做,在REST模式下,可使用兩種方式執行刪除,一個方式是傳遞一個對象到服務,好比一個order訂單對象(裏邊實際有效的僅僅是id字段),另外一種方式傳遞一個id或一組id,執行數據庫的刪除操做。
PATCH用於追加模式更新數據。
TRACE回顯提交的數據,能夠用於調試以及查看服務端數據的變動。
附 : ServiceStack 內置的 客戶端實現,從中也能夠看出不管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)