特点:简单可靠高效跨平台跨语言

含义:

  • Web Service 简单来说是指提供给不同设备通过互联网(一般使用 HTTP 协议)进行通信和交换数据的一种服务。RESTful Web Service 是实现 Web Service 的一种方式。
  • REST (Representational State Transfer),是一种架构方式和约定,和具体实现无关,也不一定必须基于Web。一般把采用 REST 架构的 Web Service 称之 RESTful Web Service,严格来说,我们应该称这种 Web Service 为具有 REST 风格的 Web Service,不是协议,没有规定传输消息的具体格式,简单和轻量级如:例如都使用HTTP传输,使用风格类似的 URL 作为 API 和 使用 JSON 或者 XML 来传输数据等等(目前 JSON 占据主导地位,并且有持续流行的趋势)。
  • 使用 SOAP 的 Web Service 实际上是以协议(protocol)的形式工作的。SOAP Web Service 严格规定了如何发现和描述 API,其传输的消息也有严格统一的格式(例如传输的载体XML有严格的格式规范)

REST 架构约定

  • CS结构(Client–server)服务端和客户端之间遵守相同的接口规范。在遵守相同接口规范的前提下,二者都可以独立演化,甚至可以被其它的实现替代。服务器不跟踪客户端的状态(分页的实现/Facebook API)提高了服务器的可扩展性(scalability)
  • 无状态(Stateless)任何时候一个客户端的请求数据都包含能够让服务端完成请求的充分信息,服务端不依赖前后不同请求的顺序和状态信息来完成请求。请求的session信息由客户端持有,并在必要时连同请求数据一起发送。服务端可以使用请求中的session信息去其它外部服务或者数据库获取相关内容进以便对该请求做权限验证等操作,提高了系统的健壮性(reliability),但也造成了传输数据的冗余性。
  • 缓存机制(Cacheable)提高服务器的效率和性能
  • 系统分层(Layered system)提高了系统的可扩展性方便我们管理不同资源的权限,有利于提高系统的安全性
  • 可定制代码(可选)(Code on demand)
  • 一致的接口(Uniform interface)降低子系统之间的耦合度子系统只要关注实现接口即可,在保证接口一致的情况下,不同的实现可以各自独立演化。
    • 一致的数据格式:比如 Web Service 请求返回格式要么是 HTML,要么是 XML,要么是 JSON,不能返回服务端自己内部使用的特殊格式。
    • 可以对已有数据进一步操作(Resource Identifiers):通常我们只要在返回的数据中包含一个 UID 即可做到这点。比如从服务端获得了一个订单数据,这个订单数据里应该保证有一个唯一的订单 ID,当我们想对这个订单进行进一步操作时,可以保障操作的是同一个订单。
    • 数据具有自我描述性:比如通过HTTP返回的数据里面有 [MIME type ]信息,我们从MIME type里面可以知道数据的具体格式,是图片,视频还是JSON。
    • 应用系统状态变化只依赖超媒体(Hypermedia):应用系统状态变化只依赖于服务端发来的Hypermedia(如超链接 hyperlinks)。举例来说,假设向一个微博 Web Service 请求一条微博信息,服务端响应信息中应该包含和这条微博相关的其它的URL。客户端可以进一步利用这些URL发起请求来获取感兴趣的信息。

RESTful Web Service 架构的更多相关文章

  1. 【转】基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)

    转载:http://www.cnblogs.com/windwithlife/archive/2013/03/03/2942157.html 一,选择一个合适的,Web开发环境: 我选择的是Eclip ...

  2. 使用Java创建RESTful Web Service

    REST是REpresentational State Transfer的缩写(一般中文翻译为表述性状态转移).2000年Roy Fielding博士在他的博士论文“Architectural Sty ...

  3. JAX-RS 方式的 RESTful Web Service 开发

    JAX-RS 方式的 RESTful Web Service 开发 ——基于 CXF+Spring 的实现 Web Service 目前在风格上有两大类,一个是基于 SOAP 协议,一个是完全遵循 H ...

  4. MEAN Stack:创建RESTful web service

    本文在个人博客上的地址为URL,欢迎品尝. 前段时间做了DTREE项目中的前后端数据存储功能,在原有的ngController上进行HTTP请求,后端接受到请求后再存储到mongoDB上.现将学习所得 ...

  5. 使用Java创建RESTful Web Service(转)

    REST是REpresentational State Transfer的缩写(一般中文翻译为表述性状态转移).2000年Roy Fielding博士在他的博士论文“Architectural Sty ...

  6. day01(RESTful Web Service、SVN)

    今日大纲 搭建SSM环境 基于SSM环境实现用户管理系统 学习RESTful Web Service 学习SVN 统一开发环境 JDK1.7 32? 64? -- 64 Eclipse 使用4.4.1 ...

  7. Java Restful Web Service 学习指南

    Restful是一种架构style,目前常说的有restful web service, resultful http.现在热搜榜的微服务,大多数会采用Restful方式. JAX-RS 作为一个Re ...

  8. Django实战(15):Django实现RESTful web service

    曾几何时,Ajax已经统治了Web开发中的客户端,而REST成为web世界中最流行的架构风格(architecture style).所以我们的选择变得很简单:前端ajax访问后端的RESTful w ...

  9. RESTful Web Service实战 小结1

    1 REST的基本实现形式HTTP+URI+XML,但不是唯一形式.XML后来被Json格式替代.REST是一中架构风格(Representational State Transfer,表述性状态转移 ...

随机推荐

  1. leetcode-algorithms-22 Generate Parentheses

    leetcode-algorithms-22 Generate Parentheses Given n pairs of parentheses, write a function to genera ...

  2. 初次安装git配置用户名和邮箱

    初次安装git配置用户名和邮箱 初次安装git需要配置用户名和邮箱,否则git会提示:please tell me who you are. 你需要运行命令来配置你的用户名和邮箱: $ git con ...

  3. poj-2514-模拟

    http://poj.org/problem?id=2514 Ridiculous Addition Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  4. Django之权限管理插件

    一.功能分析: 一个成熟的web应用,对权限的控制.管理是不可少的:对于一个web应用来说是什么权限? 这要从web应用的使用说起,用户在浏览器输入一个url,访问server端,server端返回这 ...

  5. ActiveMQ使用例子

    网上收集的例子:有broker,producer,consumer public class MqApp { public static void main(String[] args) throws ...

  6. Qt中漂亮的几款QSS

    /* === Shared === */QStackedWidget, QLabel, QPushButton, QRadioButton, QCheckBox, QGroupBox, QStatus ...

  7. JBOSS禁用delete和put方法教程

    一.背景说明(与此节修复没多大关系可跳过) 今天应用报扫描出“启用不安全的HTTP方法”漏洞需要进行修复,看后边还有IIS的修复建议:一边不满怎么用IIS一边研究了具体操作半天,由于IIS不同版本操作 ...

  8. jdk重装后com.sun.tools.javac.Main is not on the classpath的问题 .

    在重装了JDk之后,在编译工程的时候出现如下错误: com.sun.tools.javac.Main is not on the classpath.Perhaps JAVA_HOME does no ...

  9. [AtCoder2558]Many Moves

    Problem 共有n个格子,有两个硬币在a,b格子上,还有q个操作. 每个操作给你一个编号,要求将一个硬币移到这个编号上. 问你硬币移动的总距离最小值. Solution O(n^3):DP[i][ ...

  10. caffe操作技巧

    查看网络结构: (1)利用caffe自带的Python,可以将*.prototxt保存为一张图片, sudo  python python/draw_net.py  *.prototxt  *.png ...