文档章节

ServiceStack 项目实例 002 REST服务与客户端模式

丁川
 丁川
发布于 2016/10/02 11:44
字数 1127
阅读 35
收藏 1

       ServiceStack框架提供三种模式的服务接口实现, REST  、Client 以及和WCF相兼容的SOAP WebService ,这三种模式统称WebService,目前对于移动平台和云服务火爆的情形下,最为普及的是REST模式。

 

WebService常用连接模式:

REST Client SOAP WebService

 

       在不同模式下,可以使用不同的数据(流)格式,最为常用的是XML 、JSON , 主要使用在REST模式下,此外还支持JSV, CSV 以及SOAP格式的数据。

XML JSON JSV CSV SOAP

      

       在前文中提到启动服务(SS项目),这种服务是一种无界面的,对外仅提供数据服务,通过一套自定义的API访问,在大型网站广为使用,比如微信、微博、淘宝及人人网、各种网盘开发API等。

       SS中,客户端连接到服务端的方式主要有两种,通过REST方式或者Client方式,初始化客户端是相同的 :

       

1

var service = new JsvServiceClient("http://localhost:2790/");

 

通过REST方式访问服务:

 

       

1

2

var storyResponses = service.Post<List<NewsResponse>>("newslist",

                new NewsAll() { cid=0 });

 

        其中service.后边的Post为HTTP指令,接下来要详细说明,NewsAll()为入口类,NewsResponse为出口类,使用时结构为:

HTTP 指令 出口类 ("路由" 入口类{ 传入参数 }

 

通过Client方式访问服务:

 

         

1

2

3

4

5

6

service.Send<SubmissionResponse>(new Submission()

                {

                    Body = news.Text,

                    Headline = news.Headline,

                    SubmissionTime = news.Date

                });

        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还是客户端都是使用同样的类库:  未翻译

    

本文转载自:http://soaop.blog.51cto.com/6164600/1585803

共有 人打赏支持
丁川
粉丝 4
博文 52
码字总数 4829
作品 0
南宁
程序员
私信 提问
ServiceStack 简单使用

提到构建WebService服务,大家肯定第一个想到的是使用WCF,因为简单快捷嘛。首先要说明的是,本人对WCF不太了解,但是想快速建立一个WebService,于是看到了MSDN上的这一篇文章 Building Cro...

麦田守望者LEO
07/23
0
0
ServiceStack 4.5.10 发布,.NET Web 服务框架

ServiceStack 4.5.10 已发布,Service Stack 是一个高性能的 .NET Web 服务框架,简化了开发 XML、JSON、JSV 和 WCP SOAP Web 服务。它定义了符合 Martin Fowlers 数据传输对象模式,这是一个...

王练
2017/06/11
1K
2
ServiceStack v4.5.4 发布,支持 .NET Core

ServiceStack v4.5.4 发布了,该版本是一个针对 v4.5.2 的快速修复版本,修复了一些NuGet包的问题。 Service Stack 是一个高性能的 .NET Web 服务框架,简化了开发 XML、JSON、JSV 和 WCP SO...

王练
2016/10/24
2.4K
13
redis在windows下面运行稳定吗?

有没有人在实际项目上将redis运行在windows下面? 因为redis官方不支持win,github上面的ServiceStack是微软搞出来的。 不知道大家在实际项目中应用的效果怎么样?...

孙小东
2015/08/12
2.6K
6
ServiceStack做WebApi服务器的问题

ServiceStack做WebApi服务器时怎样获取客户端访问者的IP信息,客户端请求过来的数据流信息? 我使用Request.UserHostAddress获取到的是 "[::1]:8888" (我开的端口号是8888), 数据流信息Req...

89655408
2016/01/13
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Eos如何删除钱包

在使用Eos的keosd钱包软件时,如果要删除EOS中指定名称的钱包,最简单的办法是直接删除钱包文件,不过在删除钱包之前,需要先停止钱包软件的运行。 学习EOS应用开发要选这个:【EOS智能合约与...

geek12345
2分钟前
0
0
js操作时间

获取当前时间 function getSystemDate(){ var systemDate = new Date(); // 获取当年 var year = systemDate.getFullYear(); // 获取当月 (月+1是因为js中......

简心
9分钟前
0
0
区块链开发教程推荐

区块链的重要性已经毋庸置疑,但对大多数跃跃欲试的开发者而言,去中心化思想、非对称加密、共识算法等技术点的理解和运用,都是入门区块链开发的挑战。合适的区块链开发教程可以极大地缩短区...

笔阁
9分钟前
0
0
菜单menuView总结

1、FTPopOverMenu

_____1____
20分钟前
1
0
MyEclipse教程:Web开发——部署和测试Web项目

MyEclipse 在线订购年终抄底促销!火爆开抢>> MyEclipse最新版下载 本教程向用户展示了使用关联的Web项目创建Web片段项目的机制。用户还可以获得要检查的示例项目。在本教程中,用户将学习如...

电池盒
36分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部