阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

Restlet 1.1.0:改进的灵活性和规范支持

  • 2008-11-12
  • 本文字数:2905 字

    阅读完需:约 10 分钟

Restlet 是一个用来构建 REST-ful 应用的 Java 框架,它在上周发布了 1.1.0 版(该版本是自 2007 年 4 月以来第一个主要的发布),这标志着其到达了一个新的里程碑。

1.1.0 发布包括大量重要的变化, Noelios Technology 博客上对其进行了详尽的说明:

  • 对 HTTP 有了更深广的支持,比如部分下载、可恢复上传和内容完整性验证。
  • 提供了业界对 WADL 规范最好的支持,可以为 REST APIs 提供自动且同步的文档。可以生成 XML 格式的 WADL 文档,同时还能借助于来自 Yahoo!、使用广泛的样式将其即时转化为 HTML 格式。
  • 首个对新 JAX-RS 1.0 规范的完整实现之一,该规范提供了面向注解的开发方式。
  • 提供了新的 Restlet-GWT 模块,可以使 Restlet API 的客户端连接到流行的 Google Web Toolkit 1.5 JavaScript 平台上,这样我们就可以从 Web 浏览器调用 RESTful 应用了。
  • 提供了新的扩展,可以更轻松地与 JAXB 2.1、JiBX 1.1、Spring 2.5、OAuth、OSGi、Oracle XDB 及 SSL 技术集成。
  • 对 Atom Syndication XML 格式及 Atom Publishing 协议支持的改进。这两种格式化和解析现在都可用了。
  • 基于 JavaMail 的新的 POP3 连接器,可以以 RESTful 形式访问远程邮箱。
  • 提供了新的 Grizzly HTTP 服务连接器,首次在 Restlet API 中完全采取了 NIO 支持,让可伸缩性和性能迈上了一个新台阶。
  • 提供了新的内部 HTTP 客户端和服务连接器,以简化开发阶段(零配置)并使得部署更加快捷。

Restlet 框架可以运行在任何 Java Servlet 容器中(通过 RestletServlet),也可以作为独立的 Java 应用来运行(这样省去了很多部署和配置选项)。

上面提到的与 Restlet 1.1 一起发布的 NIO HTTP 服务连接器是提供给独立 Java 版本的 Restlet 的,它基于用于 GlassFish 中的 Grizzly NIO 框架

上个月发布的 JSR-311 定义了 JAX-RS 1.0 规范。如上所述,Restlet 支持该规范,而且 Restlet 的主开发者 Jérome Louvel 还是该 JSR 专家组的成员。

InfoQ 有幸采访了 Restlet 项目的领导者 Jérôme Louvel,对该发布进行了了解。首先,我们问到了对 JSR 311 的支持:

我们已经在 JSR 311 专家组中占据了一席之地,可以向规范领导者提供一些重要的反馈。在这个过程中,Restlet API 还是我们重要的灵感来源。我们开发了第一个针对 Java 的 REST 框架(在 2005 年底发布),根据多年的经验,我们能够向 Restlet 用户提供 JAX-RS 支持。 因此,我们非常高兴地宣布在最新的 Restlet 1.1 版中发布了 JAX-RS 1.0(由 JSR 311 定义的 API)的完整实现。这是 Stephan Koops 围绕其硕士论文而努力工作的结果。Stephan 还会继续与 Restlet 社区一起完成该实现的开发工作。

他的下一个目标是借助于 JCP scholarship program 获得对 TCK 的访问,并得到针对 Restlet 的 JAX-RS 扩展。但我们已经对当前的实现状态感到非常满意,该实现使用了很多来自 Restlet API 的特性,比如连接器(像 Jetty、Grizzly 及 Simple)和 Restlet 服务(比如将 URI 文件扩展转化为恰当的 HTTP 内容头)的有效性。

接下来,我们问询了 Jérôme Louvel 何时使用 JAX-RS,何时使用本地 Restlet API?

你需要了解几个方面才能做出选择。 首先,我们手头上有两个完全不同的设计。如果使用核心 Restlet API,我们就会遵循一个传统的面向类的设计,Servlet API 开发者对此会很熟悉。基本上所有重要的 REST 和 HTTP 概念都会在 API 中有一个相应的 Java 类,这样就可以很直观地将理论和协议映射到 Restlet 特性上。

这会产生一个简洁、可重用、可扩展的框架。例如,我们可以将 Restlet 应用部署到各种环境下,如 Servlet 容器、OSGi 内核、Spring 及 Guice IoC 容器、独立的 JVMs、Groovy、Scala 或是 JAIN/SLEE。我们甚至还将 Restlet API 连接到了 GWT 1.5(Google Web Toolkit)上,这使得 Web 浏览器可以与任何 RESTful 后端友好地进行交互,而这与默认的 GWT-RPC 解决方案是完全不同的。我们还打算在接下来的 1.2 版中将 Restlet API 与 Google Android 连接起来!

另一方面,JAX-RS 采取了一个全新的面向注解的设计。该设计起始于领域对象(POJOs),对其注解以描述它们应如何暴露成一个 REST API。理论上,同一个 POJOs 还可以被注解为 JAXB 来描述其应如何序列化成 XML 或 JSON。

然而,在实际的 REST 应用中,你很快就会发现光对现有的领域对象注解是不够的。REST 对 Web 应用来说是一种全新的思考和设计方式:我们称之为面向资源的设计。它与面向对象有一些相似点,但却用开放的状态描述代替了受保护的封装,其识别是基于 URI 的,并且接口是统一的(基于 HTTP 方法)。更重要的是,REST 层上的资源与支持的领域对象之间的粒度是不同的,这需要我们定义一套新的资源类。相对于注解这些资源类,我认为让他们继承基础的 Restlet 资源类会更简单,也更强大。

现在,作为一个 JCP 批准的标准,一些新项目有时会需要 JAX-RS,尤其是因为它将成为即将到来的 JEE 6 标准的一部分。一些公司总觉得使用 JAX-RS API 更舒服一些,因为 JAX-RS API 带给他们这样一种感觉:可以将其代码从 JAX-RS 的一种实现转变为另一种实现,这保护了其代码免受供应商的利益之争。

然而,相对于 JEE 首次制定时的私有软件时代,当今的开源年代这已经不那么重要了。看看 Spring、Hibernate、Groovy 是如何改变 Java 世界的吧。同样在实践上,每个供应商都在诱惑你使用一些非标准的特性,像并非 JAX-RS 1.0 组成部分的客户端支持,因此这还是会引入一层供应商独有的东西。

最后,Restlet API 的特性范围大大超出 JAX-RS 的特性范围。我们对客户端和服务器端应用都提供了支持,同时还支持几种协议(HTTP、SMTP、POP3、 FILE、JDBC 等)的连接器,这些都是通过对 HTTP 语义的直接映射实现的,所有的内容都使用一个统一的 API。我们还提供了一个完整的 Servlet API 的替代方案,该方案具有更加动态和灵活的 URI 映射、对连接器的编程式支持、认证及虚拟主机。

Restlet API 还提供了操作静态文件目录的类,它们可以自动地更新内容并支持远程更新。它还提供了建立反向代理所需的一切,这样你就可以从你自己的 Web 浏览器应用中访问外部的 REST APIs 了。

最后,如果你的项目需要 JCP 标准的支持或者你更喜欢注解的编程风格,那么我推荐你使用我们的 JAX-RS。在其它情况下,我推荐你使用核心 Restlet API 以获得对 REST/HTTP 更广泛和直观的支持,同时也可以使用更多的部署选项。

最后,我们了解了关于 Restlet 社区的更多信息:

Restlet 代码集有 8 个提交者。其中 2 个核心提交者由 Noelios Technologies 资助,该公司驱动了这个项目。他们负责 Restlet 核心(API 与引擎),以及大量扩展、构建过程和与外部贡献的集成。自从该 项目首次发布以来,已经有大约 160 个开发者为该项目作出过贡献! 我们还有 6 个扩展提交者,他们负责特定的扩展,如 JAX-RS、GWT 及 XDB(Oracle)。这些提交者要么是个人,要么是由其它合作公司(比如 Solertium 及曼彻斯特大学)资助的开发者。

最重要的是,Restlet 是一个属于用户和贡献者的社区,他们互相支持,齐心协力地推动 Restlet 项目沿着最适合他们项目需要的方向发展。

查看英文原文: Restlet 1.1.0: Improved Flexibility and Specification Support

2008-11-12 08:10687
用户头像

发布了 88 篇内容, 共 258.5 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

即时通讯技术文集(第6期):移动端弱网优化文章汇总 [共13篇]

JackJiang

网络编程 即时通讯IM

NFTScan 正式推出「NFTScan as a Service」NaaS 服务

NFT Research

NFT 数据基础设施

100+款AI产品薅羊毛攻略(中)——1年节省大几百万

夏夜许游

AI 视觉智能 阿里云视觉智能开放平台 薅羊毛

本地开发完成的 Fiori Elements 应用,部署到远端 ABAP 服务器上的详细步骤

Jerry Wang

web开发 abap Fiori SAP UI5 11月月更

代码质量与安全 | “吃狗粮”能够影响到代码质量?来了解一下!

龙智—DevSecOps解决方案

代码质量 代码安全 静态代码安全

JAVA面试基础经典百问,拿下大厂offer

钟奕礼

Java java程序员 java面试 java编程

云时代下,医药行业管理居然这么简单

华为云开发者联盟

数据库 华为云 SaaS医药管理系统

智慧屏也常用常新,华为智慧屏V98等6款设备可升级HarmonyOS 3正式版

Geek_2d6073

Nacos 中的配置文件如何实现加密传输

小小怪下士

Java 程序员 微服务 SpringCloud

Serverless Devs 重大更新,基于 Serverless 架构的 CI/CD 框架:Serverless-cd

Serverless Devs

云计算 Serverless Serverless Devs

分布式流处理组件-理论篇:Kafka与安装配置

谢先生F

架构 kafka 3.X 11月月更

ITSM | 企业如何管理变更、响应事件以及创立知识库——专访龙智技术专家与顾问

龙智—DevSecOps解决方案

java的这些多线程面试专题,你都知道吗?

钟奕礼

Java 程序员 java面试 java编程

静态WEB容器镜像最小化实践

mengzyou

DevOps Web Docker 镜像

toB应用私有化交付发展历程、技术对比和选型

北京好雨科技有限公司

火山引擎DataTester背后,抖音的名字原来是AB测试来的

字节跳动数据平台

大数据 AB testing实战

【Git实战】协同开发,如何紧急修复线上bug?

王中阳Go

git 高效工作 学习方法 git 学习 11月月更

用户文章 | 原来Steam和Perforce有这种关系?!

龙智—DevSecOps解决方案

版本控制 版本管理工具 版本管理

BI工具中哪一种使用体验更好?

夏日星河

CleanMyMac2023体验版苹果电脑管家

茶色酒

CleanMyMac CleanMyMac2023

5年Java开发4面阿里挂在JVM,临走时面试官给了我一份JVM手册

钟奕礼

Java java程序员 java面试 java编程

云原生安全系列2:提升镜像安全的10条建议

HummerCloud

云原生 镜像安全 云原生安全

再见 Fred Brooks

Journeyman

IT 新闻

国内Quick BI为何可以入选魔力象限?

小偏执o

深度学习框架新手快速上手指南

MegEngineBot

深度学习 开源 教程 MegEngine 新手入门

Fruity Loops Studio2023最新版水果编曲软件下载

茶色酒

Fruity Loops Studio

云图说|移动应用安全服务—App的体检中心,全面检测,安全上路!

华为云开发者联盟

华为云 移动应用安全 VSS

想搞懂持续交付理论和实践,你只差这三个问题

华为云开发者联盟

云计算 云原生 华为云 代码托管

React 中的重新渲染

阿里巴巴终端技术

前端 React

阿里云存储负责人吴结生:重新定义下一代云存储

云布道师

云存储 云栖大会

现在啥软件都有开源,BI 呢?

陈橘又青

数据库

Restlet 1.1.0:改进的灵活性和规范支持_Java_R.J. Lorimer_InfoQ精选文章