JSR 311最终草案:RESTful Web服务Java API

JSR311定义了JAX-RS,这是一个用于创建RESTful Web服务的Java API。该规范已通过JCP执行委员会投票,进入稳定版本。JAX-RS采用注解方式简化开发流程,支持HTTP协议并鼓励资源中立的设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                                                           作者:Stefan Tilkov  译者 胡键 来源:InfoQ  2008-09-27

去年2月,Sun宣布了JSR 311:RESTful Web服务的Java API。9月23日,规范的1.0草案通过了JCP执行委员会的赞成投票,这基本意味着它现在已经定稿。

JAX-RS是Java中用于实现以HTTP为基础的RESTful Web服务的 基于注解的API。本质上,注解类和方法的信息能让运行时(Runtime)将它们暴露为资源,这种方法和通过Servlet编程模型来暴露类与方法的做 法有很大区别。实现JAX-RS的运行时(Runtime)周旋于HTTP协议和Java类之间,考虑URI、被请求和被接受的内容类型和HTTP方法。 除了Sun提供的参考实现Jersey之外,可用的其他实现(尚在不同的完成阶段)包括:流行的Restlet框架的一部分,JBoss RESTeasy项目和Apache CXFWeb服务栈的一部分。

InfoQ采访了规范带头人,Sun的Marc Hadley和Paul Sandoz,请他们畅谈了他们对JAX-RS和整个过程的想法。

被问到他们对这个结果的心情时,Mark表示他对API最终完成非常满意。他还表示,非常幸运的是,在专家组从事API设计时就有如此多的实现被构 建出来,并且这有助于抚平API中的任何不足。Paul补充说,不少开发者自愿在API的各个版本上工作,采用测试驱动的方式去实现,并提供反馈。

在问及最具挑战性的方面时,Marc指出,一开始很难在API的风格和范围上达成统一:

为了启动这个JSR,我们以一个涉及面很广的提案开了个头。但是,回想起来,我认为我们可能从一个更具体的方面开始构建更好。
在过去的几个月内,我们已经看到了大量对这个JSR的关注,主要挑战是既保证进度又能适应所有新请求。
Paul大胆地对JSR中“J”的某些方面表示了质疑:

可能这显得有点儿异端,但是有时我发现当前的Java语法本身有点挑战性。但是,通过Java注解、范型和构造器 (Builder)模式,我认为我们把事情降到了一个非常简洁的水平。而且,方便地使用Scala和Groovy来书写这种JAX-RS应用也是有可能 的,这两种语言都支持与Java字节码兼容的注解。
在启动这个JSR的时候,REST社区对它能否符合REST的关键原则表示怀疑。Mark认为这一目标已经达到:

我认为API是鼓励资源中立的观点的,它让开发者自己决定他们资源的标识符和他们支持的方法。对内容协商的说明性支持非常好,缺 省的资源生命周期鼓励无状态的方式。如果我必须指出一个弱点的话,那就是它对“超媒体即状态引擎(hypermedia as the engine of state)”支持有限。虽然我们能很好地支持从请求URI中抽取信息和构造资源URI,在表述(representations)中正确使用超媒体这一任务较多的还是留给了开发者自己去完成。
Paul表示同意:

是的,这可能是最困难的地方了。JAX-RS提供了大量构造URI的方法,但是建模API中还没有类似JAXB这样的URI绑定工具。我认为在这一方面,我们有一些办法可以探索,如Henry Story的RDF序列化。
问及JSR 311上的工作是否改变了他对Web和Web服务的观点时,Mark表示这印证了他的一个观点,即一个人“无需依赖更复杂的东西就可以用HTTP完成一件非常伟大的事”。Paul指出,REST发明者Roy Fielding的将稀疏位数组(sparse bit array)用于通知便是REST可在将来带来惊喜的一个例子。

我们还向Mark询问了他期望JSR 311如何对即将到来的Servlet规范修订产生影响:

JAX-RS应用可以被Servlet容器托管,因此两者默契合作非常重要。JAX-RS是新的Servlet可插性 (pluggability)框架的一个潜在消费者,因此我们正在着手就此提出我们的要求。一个难处理的地方是,JAX-RS提供了较Servlet更灵 活的URI到资源的映射方式,这对联合使用说明性的Servlet安全和JAX-RS来说是个挑战,因此我们也在从事这方面的工作。
最后,Mark证实Jersey不“只是”一个参考实现,而且完全可作为产品使用,并且已经有实际的部署了。他还指出,Jersey将是Glassfish JSR 311实现,而这正是Jersey需要达到产品质量的原因。Paul强调了另一原因:

定期发布规范和实现的试验版本(early access)一个好处就是,这让APT和实现都能及早和频繁地接受测试的考验:-)
你可以联机阅读这个规范;Jersey参考实现可从java.net获得,并在Java 5或更高版本上运行。

 

### 腾讯iOA私有化部署成本分析 腾讯iOA作为国内领先的零信任安全解决方案之一,支持SaaS、私有化及混合部署模式。在企业对数据安全性要求较高的场景下,私有化部署成为首选方案。以下从硬件投入、软件授权、运维服务等方面进行综合成本分析。 #### 硬件投入成本 私有化部署需要本地服务器资源来承载控制中心、网关和终端管理模块。根据典型中型企业需求,建议采用双节点高可用架构,每台服务器配置不低于8核CPU、32GB内存、1TB SSD存储空间,以保障策略计算、身份认证与访问控制的稳定运行[^2]。若采用物理服务器采购方式,两台设备成本约在10~15万元区间;若已有虚拟化平台,则可通过分配资源池降低硬件支[^1]。 #### 软件授权与服务费用 腾讯iOA私有化版本按用户数或终端数量进行授权计费,具体价格因功能模块组合而异。基础版包含零信任SDP(软件定义边界)与CWPP(云工作负载保护平台)能力,适用于远程办公与应用访问控制场景,年费约为每位用户300元起[^2]。对于500人规模的企业,年度授权成本约15万元。此外,首次部署需支付一次性实施服务费,涵盖系统集成、策略配置与接口对接等,通常为5~8万元[^3]。 #### 运维与扩展成本 私有化部署后需配备专业IT团队负责日常维护、日志审计与策略优化。若企业内部缺乏相应技术储备,可选择厂商提供的年度运维服务包,费用约为软件授权金额的20%~30%。随着业务增长,新增用户或功能模块扩展将产生额外成本,例如增加DLP(数据防泄漏)模块后,整体预算需上浮10%~15%。 #### 总体预算估算 综合上述因素,一个中型企业在完成腾讯iOA私有化部署后的首年总成本包括: - 硬件投入:10~15万元 - 软件授权:15万元(500用户规模) - 实施服务费:5~8万元 - 年度运维服务费:3~5万元 总计约33~41万元,略超30万元预算上限。若希望压缩至30万元以内,可通过精简功能模块(如仅启用SDP与基础身份认证)、复用现有服务器资源或延长付款周期等方式实现初步部署[^3]。 ```python # 成本估算示例代码 def estimate_cost(users=500, license_per_user=300, setup_fee=60000, maintenance_rate=0.25): hardware_cost = 120000 # 假设复用部分资源,取中间值 license_cost = users * license_per_user total_initial_cost = hardware_cost + license_cost + setup_fee annual_maintenance = (license_cost + setup_fee) * maintenance_rate total_first_year = total_initial_cost + annual_maintenance return { "Initial Hardware Cost": hardware_cost, "License Cost": license_cost, "Setup Service Fee": setup_fee, "Annual Maintenance": annual_maintenance, "Total First Year": total_first_year } estimate_cost() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值