Roy Fielding 的论文 REST
http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
REST 概述
首先简要介绍一下 REST。REST 代表 Representational State Transfer,它是 World Wide Web 所依赖的一套架构原则。Roy Fielding 在他的博士论文 “Architectural Styles and the Design of Network-based Software Architectures” 中首次提出了这个概念。在他的论文中,Fielding 明确指出 REST 和 World Wide Web 的五个架构原则:
-
可寻址性(Addressability)。REST 中的所有东西都基于资源 的概念。资源与 OOP 中的对象或其他名词不同,它是一种抽象,必须可以通过 URI 寻址或访问。
-
接口一致性(Interface uniformity)。与 SOAP 或其他标准不同,REST 要求用来操纵资源的方法或动词不是任意的。这意味着 RESTful 服务的开发人员只能使用 HTTP 支持的方法,比如
GET
、PUT
、POST
、DELETE
等等。因此不需要使用 WSDL 等服务描述语言。
-
无状态(Statelessness)。为了增强可伸缩性,服务器端不存储客户机的状态信息。这使服务器不与特定的客户机相绑定,负载平衡变得简单多了。这还让服务器更容易监视、更可靠。
-
具象(Representational)。客户机总是与资源的某种具象交互,绝不会直接与资源本身交互。同一资源还可以有多个具象。理论上说,持有资源的具象的任何客户机应该有操纵底层资源的足够信息。
-
连通性(Connectedness)。任何基于 REST 的系统都应该预见到客户机需要访问相关的资源,应该在返回的资源具象中包含这些资源。例如,可以以超链接的形式包含特定 RESTful 服务的操作序列中的相关步骤,让客户机可以根据需要访问它们。
JAX-RS
为什么需要另一个 Java 标准?定义 JAX-RS 这个新规范是为了简化基于 REST 的 Java 开发。它主要关注使用 Java 注释和普通旧式 Java 对象 (POJO) 实现 RESTful 服务。尽管总是可以使用 servlet 实现 RESTful 服务,但是以这种方式实现业务逻辑需要太多 HTTP GET 请求。
JAX-RS 隐藏所有 HTTP 并把 servlet 绑定到 Java 类中的各个方法。注释还可以动态地提取 HTTP 请求中的信息,以及把应用程序生成的异常映射到 HTTP 响应码。由于这些原因,JAX-RS 是一种实现 RESTful Java Web 服务的有效方法。
Web 上的 REST
以下站点当前正在使用 REST:
-
Atom Publishing Protocol。Atom 是 REST 协议最正规的实现之一,广泛用于博客发布领域。
-
Sun 的 Cloud API。这是 Sun 的 RESTful API,用于管理和创建计算、连网和存储元素等云资源。
-
Digg 的 API。Digg 是一个流行的社交网站,它使用 RESTful API 让用户和合作伙伴能够以编程方式与站点和数据交互。
-
Netflix API。Netflix 是一个 DVD 出租网站,它使用 RESTful API 提供对影片目录的细粒度访问,以及以编程方式调整用户队列和获取影片推荐。
-
Flickr API。Flickr 是一个照片上传网站,用户可以使用它提供的 RESTful API 上传、更换和搜索照片和像册。
Project Jersey、JBoss RESTEasy 和 Restlet Framework、Apache Wink 比较
功能比较
那么,应该使用那些主要领域来比较这些不同的 JAX-RS 实现呢?针对本文的目的,我主要关注 5 个重要领域。显然,可以通过更多的特性来比较这些 JAX-RS 实现,但下面 5 个特性是进行快速、简便、高效的、基于 REST 的生产质量服务开发和测试的关键特性:
-
嵌入式容器。多数 JAX-RS 实现都可以部署在一个 servlet 容器中,但有时需要在一个不基于 servlet 的简单 Java 应用程序中以一种嵌入式方式运行基于 REST 的服务。确保知道哪些实现支持使用嵌入式容器。
-
客户端 API。JAX-RS 定义了复杂的服务器绑定规范,但规定由实现框架来负责定义客户端绑定和 APIs。因此,客户端架构和框架是选择 JAX-RS 实现的一个关键属性。
-
侦听器框架。基于 REST 的 Web 服务开发人员经常需要以一种非侵入方式对 HTTP 调用进行预先处理和事后处理。这些调用对日志记录、缓存设置和安全验证等操作很有用。确定您的框架提供的、用于处理 HTTP 侦听的机制。
-
数据格式支持。通过使用
MessageBodyReader
和 MessageBodyWriter
提供程序,JAX-RS 允许轻松添加对任意数据类型的支持。确定常用格式(包括 Atom、JSON 和 MIME 多部分数据)的开箱即用支持。
-
组件集成。与其他框架的集成在基于 REST 的服务开发中很重要。通常,您使用 Spring 等其他框架进行依赖项注入,使用其他 Model-View-Controller (MVC) 框架来处理 UI。确定您选择的 JAX-RS 框架与第三方组件的原生集成支持。
http://www.ibm.com/developerworks/cn/web/wa-apachewink3/
分享到:
相关推荐
RESTful API设计规范.pdf RESTful API设计规范是指在软件架构和设计风格中,遵循一组设计原则和约束条件,以降低开发的复杂性,提高系统的可扩展性。RESTful架构的核心是面向资源,每个网址代表一种资源,因此网址...
SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验 本实验的主要目标是使用SpringBoot、Mybatis和CXF框架来实现Restful API和WebService API接口的大实验。下面是实验的详细介绍: 标题...
它是一个功能强大的Restful API工具包插件,可以根据已有的方法快速生成接口调试用例。它有一个漂亮的界面来完成请求、检查服务器响应、存储你的API请求和导出API请求,该插件能帮助你在IDEA内更快更高效地调试API!...
restful restful所需要的jar包 ========================================= Restlet, a RESTful Web framework for Java ========================================= http://www.restlet.org -------------------...
项目概述:本项目是一个基于Python语言的实战项目,使用了Flask框架构建RESTful API。它集成了Flask-SQLAlchemy作为ORM工具与MySQL数据库进行交互。项目共包含39个文件,其中主要的Python脚本文件有23个,辅助配置...
restful接口示例代码restful接口示例代码restful接口示例代码restful接口示例代码
Restful返回码定义规范1 Restful架构是一种软件架构风格,旨在提高Web服务的可扩展性、可维护性和可重用性。Restful架构的核心思想是将资源作为独立的实体,对资源进行CRUD(Create、Read、Update、Delete)操作。...
.NET作为客户端,如何调用WEBAPI RESTFUL的服务端 .NET如何开发RESTFUL服务端
Python Flask高级编程之RESTFul API前后端分离精讲第六章节Python Flask高级编程之RESTFul API前后端分离精讲第六章节Python Flask高级编程之RESTFul API前后端分离精讲第六章节Python Flask高级编程之RESTFul API...
Restful风格编程面试题 Restful风格编程简介 Restful风格编程是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更...
本资源类似于 Postman 的 IDEA 插件Restful Fast Request,在IDEA安装该插件后,找到插件安装目录,【C:\\Users\\Administrator\\AppData\\Roaming\\JetBrains\\IntelliJIdea2021.3\\plugins\\Restful Fast Request ...
Spring CXF Restful 实例
Python Flask高级编程之RESTFul API前后端分离精讲Python Flask高级编程之RESTFul API前后端分离精讲Python Flask高级编程之RESTFul API前后端分离精讲Python Flask高级编程之RESTFul API前后端分离精讲Python Flask...
RESTFUL接口文档模板,样式好看的接口文档模板,docx格式
最近在搞springboot的模块化开发,集成了shiro+jwt实现restful接口的token认证。 需新增测试表: CREATE TABLE `t_user` ( `user_id` int(11) unsigned zerofill NOT NULL AUTO_INCREMENT, `user_name` varchar(32...
开发restful接口应该遵循统一的规范,保持规范的统一才能方便维护和应用
Python Flask高级编程之RESTFul API前后端分离精讲第二章节Python Flask高级编程之RESTFul API前后端分离精讲第二章节Python Flask高级编程之RESTFul API前后端分离精讲第二章节Python Flask高级编程之RESTFul API...
通用restful返回工具类
C# 一个简单的 Restful 服务端和 Restful 客户端 Demo