文档章节

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

丁川
 丁川
发布于 2016/10/02 11:44
字数 1127
阅读 28
收藏 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
安装redis服务器 jedis分片存放数据到redis服务器

redis windows 下载地址:https://github.com/ServiceStack/redis-windows 一、下载的安装包解压到盘符的指定位置,如下结构:(纯手敲,如果有缺失,见谅) Redis.doc redis-benchmark.exe r...

薄暮凉年
2015/08/07
0
0
安装window下的redis,redis可视化管理工具(Redis Desktop Manager)安装,基础使用,实例化项目

以下包括内容: 一、redis下载安装,启动 二、Redis可视化管理工具(Redis Desktop Manager)安装 三、实例化项目 一、redis下载安装,启动 1,redis官方下载地址:https://redis.io/downlo...

saucxs
08/11
0
0
(译)在ASP.NET Web API中使用Redis

本文将介绍如何在ASP.NET Web API应用程序中使用Redis作为数据存储。利用ServiceStack.Redis库以及它强类型的Redis 客户端,实现如何建模和存储一对多的关系,以及使用Autofac的Web API依赖注...

jieqiuming
2014/05/01
0
0
Redis进阶实践之九 独立封装的RedisClient客户端工具类

Redis进阶实践之九 独立封装的RedisClient客户端工具类 一、引言 今天开始有关Redis学习的第九篇文章了,以后肯定会大量系统使用Redis作为缓存介质,为了更好的更好的Redis,自己写了两个工具...

morpheusWB
09/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

简单谈一谈压力测试

最近,在做API的压力测试,趟了不少坑,然后呢,简要记录一下。 压测前需要准备的一些事 拿到API文档不要立马上手,先基准测试,就是执行一次接口测试,至少要压这个接口,要先熟悉一下他的参...

浮躁的码农
29分钟前
0
0
PHP 错误调查

一.定义:PHP错误是由PHP无法读懂执行的代码引起的错误。 二:错误日志 error log 1.在php.ini 里设置 log_errors = on, log文件位置 error_log=/tmp/php_errors.log 2.代码里设置ini_set('...

忙碌的小蜜蜂
32分钟前
0
0
knn算法

import numpy as np def CreateDateSet(): group = np.array([[1.0, 2.0], [1.2, 0.1], [0.1, 1.4], [0.3, 3.5]]) labels = ['A','A','B','B'] return group,labels coding:utf-8 from numpy......

南桥北木
32分钟前
0
0
自己手写一个 SpringMVC 框架

前端框架很多,但没有一个框架称霸,后端框架现在Spring已经完成大一统.所以学习Spring是Java程序员的必修课. Spring 框架对于 Java 后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,...

别打我会飞
今天
2
0
01-《Apache Tomcat 9》之文件索引

《Apache Tomcat 9》是《看Apache官方文档学英语》的第一个专栏!让我们一起在看文档的过程中学英语,在学英语的过程中夯实技术! Documentation Index - 文件索引 Introduction - 介绍 This...

飞鱼说编程
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部