一.REST介绍
表述型状态转移(REpresentational State Transfer, REST)
Web和REST之间有什么关系呢?
我们来聊聊组成Web的几大基础技术,URI(统一资源标识符,用来标识资源)、HTTP(超文本传输/转移协议,用来操作资源)、Hypertext(超文本,用来描述资源的内容与状态,我们可以用HTML、XML、JSON或者自定义格式的文本来描述任何一个资源)。
其实REST并不是一种新兴的技术语言,也不是什么新的技术框架。准确来说说REST只是一种概念、风格或者约束,是回归HTTP本身的建议。
REST是由Roy Thomas Fieding在他的博士论文《Architectural Styles and the Design of Network-based Software Architectures》(《架构风格与基于网络的软件架构设计》)中提出的一种架构思想。在REST中我们关注技术实际上只是URI、HTTP、Hypertext而已。
Roy在他的论文中提出了一个RESTful应用应该具备的几点约束。
每个资源都应该有一个唯一的标识
使用标准的方法来更改资源的状态
Request和Response的自描述
资源多重表述
无状态的服务
REST和RPC之间还是有很大的差异的。
REST强调资源有唯一的URI;而RPC更加强调过程(动词),由统一的接口来调用它们。
REST回归HTTP最初的设计;RPC仅仅只是把HTTP作为传输协议来使用。
REST是由超文本驱动的;RPC是由方法驱动的。
REST强调HTTP通信的语义可见性,通过消息头和标准的HTTP方法来体现;RPC把语义封装在HTTP消息体中。
二.REST的应用场景
REST最适合的应用场景其实是需要对外暴露服务的时候,这个时候,我们可以充分利用REST的自描述、无状态、唯一标识等特性来提供清晰、友好的API,而且现在的Jesery、RESTEasy等JAX-RS框架也提供了OAuth的支持,基本上能够保证服务安全。
最不适合的应用场景是对性能要求高的系统内部之间的服务调用,当你在这个时候使用REST的话,那么REST所有的特性都会变成拖累。这个时候,还是需要选择更底层的通信协议和方式会更好一些,比如ICE。
三.规划REST服务
要规划一个REST服务的时候,其中最关键的概念其实就是“资源”。
狭义的讲(在Web环境中),它是一个可以存放、连接在计算机上,可以通过比特流进行操控的实体。一个实体想成为资源,它必须有一个URI。在这里URI包含了两重含义:1)它是资源的名称 2)它是资源的地址。
规划URI的时候,有几点希望能够注意一下:
一个URI标识一个资源,但是一个资源可以被多个URI标识。
资源也是有层次的,这个层次应该在URI上充分的体现出来。
在规划URI的时候,需要定义一些团队内部确认的关键字或符号,这些关键字或符号是有特殊意义的,不能随便使用。
需要有一个URI定义的文档,以备以后的查询和维护。
可以使用URI Template来描述URI的定义。
当我们定义好资源之后,接下来要做的事情就是定义操作资源的方法以及资源的表述格式了。使用HTTP提供的基本方法来对资源进行操作,一般的操作定义如下:POST(创建资源)、GET(获取资源)、PUT(修改资源)、DELETE(删除)。它们正好对应了CRUD。对资源的表述,一般的选择会是XML,但是我更加推荐使用JSON来表述资源。在网络中的传输量也小,而且也便于JavaScript来解析,,而且现在其他语言解析也是非常方便。
四.选择一个快速方便的REST框架
推荐使用Jersey和RESTEasy来创建自己的REST服务。
Jersey是由SUN提供的JAX-RS实现参考,对JAX-RS支持的最为充分和快速,基本上所有的JAX-RS的新特性都会在Jersey里第一个体现出来;RESTEasy则是有JBoss开源的项目,它同样有很多优点,而且文档也比Jersey更好一些,但是和JBoss应用服务器绑定的比较紧密。
五.发布REST服务需要注意的地方
对外暴露API时,需要注意版本规划,以便以后API的升级和维护,一旦某个API要升级,输入和输出发生变化的时候,你根本不知道该通知谁来升级,解决问题的时候也非常麻烦。
由于对外暴露API之后,你很难控制API被调用的次数和意图,需要在一些关键的API被调用的次数和频率上进行控制,以免受到恶意的攻击。但是,到底次数和频率应该控制在一个什么样的程度,就要看你的API的关键程度以及负载能力
由于现在浏览器的限制,只能使用HTTP的GET和POST方法,如果通过AJAX直接调用REST服务,当你的服务中需要使用HTTP的PUT或者DELETE方法来调用的话,最好是考虑使用重载POST方式将需要使用PUT和DELETE方法调用的服务能够通过POST来调用。
摘自
http://kb.cnblogs.com/page/91827/
分享到:
相关推荐
**SpringMVC REST风格详解** REST(Representational State Transfer,表述性状态转移)是一种软件架构风格,用于设计网络应用程序,特别是在Web服务中广泛采用。在SpringMVC框架中,实现REST风格的接口可以让我们...
### Elasticsearch 初识与简单案例 #### 一、Elasticsearch简介 Elasticsearch 是一款基于 Lucene 的分布式全文搜索引擎,具有高度可扩展性及灵活性。它不仅支持文本搜索,还能进行复杂的数据分析任务,因此在众多...
- **编写Controller**:定义REST API,处理HTTP请求并返回响应。 - **配置数据库**:连接数据库,配置数据源,使用JPA或MyBatis进行数据操作。 - **模板引擎**:如果需要生成动态网页,可以使用Thymeleaf、...
【标题】"SpringBoot-RestAPI:初识与构建" 在现代Web开发中,Spring Boot框架因其简洁、高效和易用性而广受欢迎,尤其在构建RESTful API方面更是得心应手。"springboot-restapi:初始提交"这个项目,显然是一个...
1. **初识Django REST Framework** - REST(Representational State Transfer)是一种设计API的架构风格,强调资源的表述和状态转换。 - Django REST Framework 提供了丰富的工具集,如序列化器(Serializers)、...
【初识Django】 Django是一个用Python编写的高级Web框架,它遵循“ batteries included ”的理念,即在标准安装中提供了许多内置功能和组件,帮助开发者快速构建高效、可维护的Web应用。Django的设计模式主要基于...
11. 网络章节介绍了如何在QML中使用HTTP服务UI、模板、HTTP请求、本地文件、REST接口、云服务和WebSockets等网络相关技术。 12. 存储章节讨论了配置设置、本地存储、SQL数据库以及其它存储APIs。 13. 动态QML章节...
《Elasticsearch 核心技术与实战》第一部分:初识 Elasticsearch第 1 章:概述课程介绍课程综述及学习建议Elasticsearch 简介及其发展历史Elastic Stack 家族成员及其应用场景第 2 章:安装上手Elasticsearch 的安装...
安装上手Elasticsearch的安装与简单配置Kibana的安装与界面快速浏览在Docker容器中运行Elasticsearch,Kibana和Cerebro Logstash安装与导入数据第3章:Elasticsearch入门基本概念(1):索引,文档和REST API基本...
这份“PowerBI官方文档(中文版)”为用户提供了一份详尽的指南,涵盖了从初识PowerBI到精通其高级功能的所有关键知识点。 首先,文档会介绍PowerBI的基础概念,包括PowerBI服务、PowerBI Desktop、Power Query、...
本教程旨在提供一个全面的指南,帮助用户从初识到精通这款强大的工具。 首先,我们来了解一下IntelliJ IDEA的基础操作。启动IDE后,你可以创建新项目或打开现有项目。在创建新项目时,可以选择各种项目类型,如Java...
总的来说,"21天ASP.NET电子教案(PPT)"将引导您从初识ASP.NET到熟练掌握其关键技术和最佳实践,无论您是初学者还是有经验的开发者,都能从中获益。通过21天的学习,您将具备构建专业级Web应用程序的能力。
《初识SharePoint 2010开发:源代码解析》 SharePoint 2010是微软推出的一款企业级协作平台,它为企业提供了一个集文档管理、网站创建、工作流自动化、信息共享等多功能于一体的解决方案。"Beginning SharePoint ...
一、初识Qt5 本书首先介绍了Qt5的安装和基本概念,让读者了解Qt5框架的构建模块和项目结构。它涵盖了Qt5的介绍、构建模块、以及如何启动一个Qt项目,为学习QML打下坚实的基础。 二、开始学习QML 学习QML的第一步是...
1. 初识Qt5:该部分是Qt 5的入门介绍,讲解了Qt的概况、构建模块和项目结构。Qt 5是Qt公司推出的跨平台应用程序和用户界面框架,支持C++、QML等语言,可用于开发桌面、嵌入式和移动应用。构建模块包括核心模块、网络...
《初识Ruby on Rails:源代码解析》 Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程,提高开发效率。本资料包包含了...
在初识Django时,读者将了解如何安装和设置开发环境,创建第一个项目和应用,以及如何构建基本的URL路由系统。 2. 数据库模型和ORM: Django的ORM(对象关系映射)允许开发者用Python代码来操作数据库。书中会介绍...
**初识Flask-Restful** 1. **安装扩展**:同样,先通过pip安装Flask-Restful: ``` pip install Flask-Restful ``` 2. **创建Resource**:Flask-Restful的核心是Resource类,继承自它并定义处理请求的方法: `...
在《QmlBook》的初识Qt5章节,介绍了Qt5的基础知识,如其构建模块、项目结构等。Qt5是一个跨平台的应用程序和用户界面框架,为软件开发人员提供创建复杂用户界面所需的各种组件。Qt构建模块涵盖了其核心模块,如Qt ...
- **REST接口(RESTAPI)**:与RESTful API交互。 - **使用开放授权登陆验证(AuthenticationusingOAuth)**:实现OAuth认证。 - **云服务(EngineIO)**:连接云端服务。 - **WebSockets**:实现实时通信。 - **...