http://www.blogjava.net/Jennifer/archive/2011/01/09/342644.html

REST顾名思义:Representational State Transfer(表述化状态转移)。REST两个基本概念:

  1. 资源(Resource):将信息抽象为资源,任何能够命名的信息(包括数据和功能)都能作为一个资源,一张图片,一份文档,一个服务(如上传图片),一个其他资源的集合等。 资源是到一组实体的概念上的映射,而不是在特定时刻与该映射相关联的实体的映射。例如,“最新上传的图片”是一个值经常变化的映射,但是“2011/1/9上传的图片”的映射是静态。它们是截然不同的资源,即使某一时刻它们可能会映射到相同值的集合。
  2. 表述(Representation): 一个资源当前或预期的状态,资源是一个随时间变化的函数,该函数将时间t映射到一个实体或值的集合,集合中的值可能是资源的表述。REST组件通过URI来获得资源的表述并对资源执行动作,并在组件间传递该表述。

举购物网站系统的例子,products通过加入购物车到orders,经过付款订单到purchase,然后到delivery。其中products和orders是资源,可以通过/products?color=green和/orders/2007/11表示;而purchase和delivery是资源products和orders某一时间的状态。应用程序如同资源和表述组成的虚拟的状态机,通过不断的获取资源的表述来转变应用程序的状态,即所谓的表述化状态转移。

REST风格架构的约束:

  1. 客户-服务器:分离关注点,将用户接口(如用户界面)和数据存储分离,如果接口不变,组件可独立进化。
  2. 无 状态:从客户端道服务器的每个请求必须包含理解该请求所必需的所有信息,不能利用任何存储在服务器上的上下文。提高了系统的可扩展性,其优点有三:可见 性,监视系统不必为了确定一个请求的性质而去查看请求之外的多个请求;可靠性,减轻了从局部故障恢复的任务量,可以快速定位;可伸缩性,不必在多个请求之 间保存状态,允许服务器快速释放资源,并且服务器不必跨请求管理资源。缺点是,由于不能将状态保存在服务器上的共享上下文中,增加了请求中发送的重复数 据,降低网络性能,因此有了约束三。
  3. 缓存:请求响应中的数据显示或隐式的标记为可缓存的不可缓存的。缓存可以为以后相同的请求重用这个响应的数据。但是缓存管理不好,会降低可靠性,导致缓存中陈旧的数据与直接访问服务器得到的数据差别很大。
  4. 统一接口:组件之间要有统一的接口,是REST风格架构区别其他风格架构的核心特征。REST由四个接口约束定义:资源的识别,web-based系统中资源由URI表示,数据库存储系统中资源还可以是XML,JSON等;通过表述对资源执行的动作:表述中包含操作该资源的信息,如增删改查,映射到HTTP协议的GET,POST,PUT,DELETE方法;自描述的消息:消息中包含如何处理该消息的信息,如哪个sevlet处理,响应中包含可不可以被缓存等信息;作为应用状态引擎的超媒体。
  5. 分层系统:通过限制组件的行为,即每个组件只能看到与其交互的紧邻层,将架构分解为若干等级层,提高各层的独立性。
  6. 按需代码:客户端知道如何访问资源,但是不知道如何处理它,向服务器发送对于如何处理资源的代码的请求,接收这些代码,然后在本地执行代码。

-------------------------------------------------------

使用Spring框架实现RESTful

copy:http://www.importnew.com/5163.html

RESTful web服务最近有多流行已经无需我多评价。是的,你的确需要它,但如何选择呢?我尝试了不同的Java REST框架,基本上都是Jersey和Spring MVC。我认为大多数情况下Spring是构建RESTful应用程序的首选。

如果你已经有了一个Spring app,接下来不需要做任何复杂的配置就可以用Spring开始实现RESTful API了。只要使用标准的注解配置向下面这样配置JSON视图解析器(view resolver ):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//这个示例使用了Groovy,相信你能够理解
@Constoller
@RequestMapping('/api/user')
class UserApi {
  @RequestMapping(value = '/{id}', method = RequestMethod.GET)
  User get(@PathVariable long id) {
     //... load user, etc
  }
  
  @RequestMapping(value = '/{id}', method = RequestMethod.POST)
  User update(@PathVariable long id, @RequestModel User updated) {
     //... load user, update values, etc
  }
}

当然,你可以不用JSON转而XML或者使用ProtoBuf以及其他什么。这很简单而且不会因为修改造成代码错误,比起Jersey要简单很多。

通常你的应用程序除了RESTful API还会有其他东西,比如标准的HTML页面、文件下载/上传、复杂的API请需求数据流处理、重要的后台处理、数据库访问、复杂的认证和授权与外部服务集成等等。Spring框架可以将这些完成得很好。同时我最喜欢的就是,通常会有两种办法达成目标:“应急办法”和常规办法:)

实际上我是Grails web的粉丝,我真的很喜欢它并且为Grails写了一些插件。我相信构建传统 web应用方面Grails是最好的框架。但是当我看见采用RESTful构建和一些现代应用之后(大多数是“单页面App”)——我总是会建议使用Spring MVC (+ Groovy,这又是另外一个话题)。

copy:读Roy Fielding的REST风格架构笔记相关推荐

  1. 使用REST风格架构您需要知道的一些事

    1. REST的由来 2. REST的构成 2.1. 资源 2.2. 资源的表述 2.2.1. MIME(Multipurpose Internet Mail Extensions) 2.2.2. 缓 ...

  2. Fielding的博士论文学习笔记(三)——结论

    "The modern Web is one instance of a REST-style architecture." 上面是Fielding在他的博士论文最后的结论里的一句 ...

  3. 不了解这些“高级货”,活该你面试当炮灰。。。【石杉的架构笔记】

    个人公众号:石杉的架构笔记(ID:shishan100) 目录 1.读多写少的场景下引发的问题? 2.引入 CopyOnWrite 思想解决问题! 3.CopyOnWrite思想在Kafka源码中的运 ...

  4. 读《Scrum敏捷软件开发》笔记

    读<Scrum敏捷软件开发>笔记 目录 读<Scrum敏捷软件开发>笔记 第I部分 启动 第II部分 个体 第iii部分 团队 第四部分 组织 第四部门 下一站 第I部分 启动 ...

  5. 淘宝电商项目落地,从零开始搭建亿级系统架构笔记

    电商亿级系统架构设计笔记,分为:基础篇.数据库篇.缓存篇.消息队列篇.分布式服务篇.维护篇.实战篇.通过学习这份笔记,你可以系统的学会从零开始搭建亿级系统架构.其中每篇中又有具体的设计实施的笔记供大家 ...

  6. 亿级流量系统架构之如何设计承载百亿流量的高性能架构【石杉的架构笔记】...

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 本文来源:石杉的架构笔记(ID:shishan100) 一.往期回顾 上篇文章<大型系统架构 ...

  7. 面试官:如果让你设计一个消息中间件,如何将其网络通信性能优化10倍以上?【石杉的架构笔记】...

    目录 1.客户端与服务端的交互 2.频繁网络通信带来的性能低下问题 3.batch机制:多条消息打包成一个batch 4.request机制:多个batch打包成一个request " 这篇 ...

  8. 亿级流量系统架构之如何支撑百亿级数据的存储与计算【转载 石杉的架构笔记】-1...

    亿级流量系统架构之如何支撑百亿级数据的存储与计算[石杉的架构笔记] 原创: 中华石杉 "本文聊一下笔者几年前所带的团队负责的多个项目中的其中一个,用这个项目来聊聊一个亿级流量系统架构演进的过 ...

  9. 全网疯传,阿里 P8 技术官的架构笔记外泄:微服务分布式架构实践手册

    前言 阿里 P8 大佬的架构笔记:微服务分布式架构实践手册从企业的真实需求出发,理论结合实际,深入讲解 Spring Cloud 微服务和分布式系统的知识. 整份笔记共分为 4 部分: 第一部分:概述 ...

最新文章

  1. servlet程序HTTP Status 500 - Error instantiating servlet class 解决
  2. 解决onclick事件调用其它带参数的函数方法无效的问题
  3. P2370 yyy2015c01的U盘(二分+背包)
  4. 一般图带权多重匹配(欧拉图+最小费用流)
  5. C#算法设计查找篇之03-插值查找
  6. How to set a timeout with AFNetworking
  7. vCenter如何逃离Windows的坑(转)
  8. 循环智能杨植麟:“人机耦合”将是对话语义应用的新趋势!
  9. hdu-5645 DZY Loves Balls(水题)
  10. [翻译] 用 CSS 背景混合模式制作高级效果
  11. Designing With Web Standard(一)
  12. pb 系统托盘实例(定时任务管理)
  13. ABTest之最常见的八个错误
  14. 赴日java常问问题_赴日软件工程师java笔试题
  15. matlab屏保弹球,连续时间下的弹球建模
  16. 广告联盟,拿什么拯救博客?
  17. uboot下的nand flash驱动分析
  18. 青龙面板-花花阅读6.25 最新修复版
  19. 1024程序员节 技术对抗赛 算法与安全答题 标准答案
  20. 唯物辩证法-马克思主义辩证法

热门文章

  1. 学习的联结理论 认知理论 建构理论 人本理论
  2. 嵌入式C语言基础知识查漏补缺--内存管理函数指针数组
  3. PYTHON玩转我的世界(3) —— 批量生成铁傀儡
  4. ICNet图像实时语义分割
  5. 【渝粤题库】广东开放大学 建筑材料 形成性考核 (2)
  6. 创新奇智公布2021年财报:近三年亏损超4亿元,徐辉对不住投资人
  7. scp远程服务器拷贝到远程服务器
  8. nodemcu与matlab,关于ESP8266 NodeMcu和ESP32 DEV模块两者的区别
  9. ACS732 和 ACS733:1MHz带宽,3600V电气隔离霍尔电流传感器 IC(采用 SOIC-16 封装)
  10. dedecms模版php,从零开始学DedeCms模板,模板制作不求人