REST|RESTful初步认识

工作中要用到jersey来实现restful风格的webservice。对于webservice还有一定的认知(可以认为是一种服务,远程调用的组件),但是对于restful笔者根本就木有了解过,restful到底是什么,是一种技术?规范?于是笔者花了些时间查询了下资料,看了下书,总算有点眉目了。

什么是REST

REST(REresentation State Transfer:表象化状态转变)描述了一个架构样式的网络系统,它是一种架构风格、设计风格而不是标准、技术,仅仅只是提供了一组设计原则和约束条件(而且并不强制)。Restful式的架构主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。现在来说,REST/RESTful都是指的RESTful Web Service。

REST标准

REST是面向资源的架构风格,通常基于使用HTTP,URI,和XML以及HTML这些现有的广泛流行的协议和标准。在你的应用系统管理之下的任何事物都将被认为是一个资源(resource),每个资源必须至少有一个URI(尽量少且具有实际意义)。

  • 资源是有URI来指定的(客户端也是通过URI来访问的)。
  • 对资源的操作包括获取、创建、修改、删除等操作,而这些操作正好对应HTTP协议提供的GET、POST、PUT、DELETE方法。
  • 通过操作资源的表现形式来操作w资源。
  • 资源的表现形式则是XML或者HTML。

REST的要求

对于实际的web架构如果要实现RESTful风格,有以下4点要求:

  1. 具有客户端和服务器结构
  2. 连接协议具有无状态性。
  3. 能够利用Cache机制增进性能
  4. 层次化的系统。

RESTful最重要的原则是:客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必须的信息。这样服务器端在请求期间重启,客户端不会得到通知,且无状态请求可以由任何可用服务进行回答,客户端可以缓存数据以改进性能。

层次化的系统表示组件无法了解它与之交互的中间层以外的组件。通过将系统知识限制在但各层,可以限制整个系统的复杂性,促进了底层的独立性。

应该注意区别应用的状态和连接协议的状态。HTTP连接是无状态的(也就是不记录每个连接的信息),而REST传输会包含应用的所有状态信息,因此可以降低对HTTP连接的重复请求资源消耗。

含状态传输的web服务也称为RESTful web api是一个使用HTTP并遵循REST原则的Web服务(JAX-RS规范定义了java对RESTful Web Service的实现,sun的jersey框架则是多JAX-RS的一个实现,jersey也是后续要学习的)。

RESTful web api从以下三个方面资源进行定义:

  • 直观剪短的资源地址:URI,例如:http://XXX.com/resources。
  • 传输的资源:Web服务器接受与返回的互联网媒体类型:JSON、XML、TEXT等。
  • 对资源的操作:Web服务在该资源上所支持的一系列请求方法(PUT POST GET DELETE)

REST优点

1、可更高效利用缓存来提高响应速度。

2、无状态性可以让不同服务器的处理一些列请求中的不同请求,提供服务器的扩展性。

3、浏览器即可作为客户端,简化软件需求。

4、相对于其他叠加在HTTP协议之上的机智,REST的软件依赖性更小

5、不需要额外的资源发现机制。

时间: 2024-08-10 00:06:17

REST|RESTful初步认识的相关文章

Java RESTful Web Service相关概念

原文地址:http://1.liangtao.sinaapp.com/?p=647 接上一篇文章REST|RESTful初步认识:http://1.liangtao.sinaapp.com/?p=639之后,在接下来的了解中也遇到了一些问题,不太懂的Java WebService这一套体系结构,导致对一些技术术语是是而非,对于若干技术,若干规范没有一个整体上的认识.这篇文章即是对Java中RESTful WebService架构相关规范,技术的认识. Web Service 从表明上来看,Web

flask开发restful api

在此之前,向大家说明的是,我们整个框架用的是flask + sqlalchemy + redis.如果没有开发过web,还是先去学习一下,这边只是介绍如果从开发web转换到开发移动端.如果flask还不是很熟悉,我建议先到这个网站简单学习一下,非常非常简单.http://dormousehole.readthedocs.org/en/latest/ 一直想写一些特别的东西,能让大家学习讨论的东西.但目前网上的很多博客,老么就按照官方文档照本宣读,要么直接搬代码,什么都不说明.我写这个系列的博客,

ASP.Net MVC开发基础学习笔记(5):区域、模板页与WebAPI初步

一.区域—麻雀虽小,五脏俱全的迷你MVC项目 1.1 Area的兴起 为了方便大规模网站中的管理大量文件,在ASP.NET MVC 2.0版本中引入了一个新概念—区域(Area). 在项目上右击创建新的区域,可以让我们的项目不至于太复杂而导致管理混乱.有了区域后,每个模块的页面都放入相应的区域内进行管理很方便.例如:上图中有两个模块,一个是Admin模块,另一个是Product模块,所有关于这两个模块的控制器.Model以及视图都放入各自的模块内.可以从上图中看出,区域的功能类似一个小的MVC项

关于部门后端全部转向java前初步设想

Java服务有些什么形式?目前来看主要是以下几类: 1.  运行在Web应用服务器的Servlet 2.  Thrift.PB.Avro等类似框架写的java服务 3.  WebService(JAX-WS.JAX-RS) 现在我们服务端要全面转向java.若后端子系统全部用Servlet写,将无法实现跨语言,我们现在客户端大部分还是.NET平台. 如果用Thrift等框架,现在满足了.NET调用Java服务,以后若客户端也全面使用用Java了,并且是Web客户端,那么用Thrift写的java

Kubernetes初步

Kubernetes是Google开源的容器集群管理系统.它构建于docker技术之上.为容器化的应用提供资源调度.部署执行.服务发现.扩容缩容等整一套功能.本质上可看作是基于容器技术的mini-PaaS平台.本文旨在梳理Kubernetes的架构.概念及基本工作流,而且通过执行一个简单的演示样例应用来介绍怎样使用Kubernetes. 整体概览 例如以下图所看到的是我初步阅读文档和源码之后整理的整体概览,基本上能够从例如以下三个维度来认识Kubernetes. 操作对象 Kubernetes以

在Ubuntu上快速搭建基于Beego的RESTful API

最近在研究Go,打算基于Go做点Web API,于是经过初步调研,打算用Beego这个框架,然后再结合其中提供的ORM以及Swagger的集成,可以快速搭建一个RESTful API的网站. 下面是具体做法: 1. 在Ubuntu中安装Go 1.8 默认Ubuntu apt-get提供的是Go 1.6,而我们要用最新的Go 1.8需要执行以下操作: 1.1 添加apt-get源并刷新 $ sudo add-apt-repository ppa:gophers/archive $ sudo apt

RESTful Web Services初探

近几年,RESTful Web Services渐渐开始流行,大量用于解决异构系统间的通信问题.很多网站和应用提供的API,都是基于RESTful风格的Web Services,比较著名的包括Twitter.Google以及项目管理工具Redmine.本文将简要介绍RESTful Web Service,希望能对读者有所帮助. 一. RESTful Web Services是什么 REST的全称是Representation State Transfer,它描述了一种设计Web应用的架构风格,它

【Rest】在Dubbo中开发REST风格的远程调用(RESTful Remoting)

目录 概述 REST的优点 应用场景 快速入门 标准Java REST API:JAX-RS简介 REST服务提供端详解 HTTP POST/GET的实现 Annotation放在接口类还是实现类 JSON.XML等多数据格式的支持 中文字符支持 XML数据格式的额外要求 定制序列化 配置REST Server的实现 获取上下文(Context)信息 配置端口号和Context Path 配置线程数和IO线程数 配置长连接 配置最大的HTTP连接数 配置每个消费端的超时时间和HTTP连接数 GZ

RESTful Web Services简单介绍

近几年,RESTful Web Services渐渐开始流行,大量用于解决异构系统间的通信问题.很多网站和应用提供的API,都是基于RESTful风格的Web Services,比较著名的包括Twitter.Google以及项目管理工具Redmine.本文将简要介绍RESTful Web Service,希望能对读者有所帮助. 一. RESTful Web Services是什么 REST的全称是Representation State Transfer,它描述了一种设计Web应用的架构风格,它