如何用AI技术降噪? QCon 广州“音视频架构实践”专场给你答案! 了解详情
写点什么

面向资源的服务端框架的设计特征

  • 2009 年 6 月 14 日
  • 本文字数:1066 字

    阅读完需:约 3 分钟

Dhananjay Nene,曾写过一篇记录 REST 的历史的好文章,在这里他探讨了设计一个面向资源的框架(ROF)应具备的几种特征,这篇文章的另一个探讨内容是尝试捕捉应用程序的细粒度对象模型与资源模型之间的关系。

对Dhananjay 而言,由于一些流行的框架如Struts,Django 和Ruby on Rails 等,有几个特征是ROF 理应具备的。然而,把它们明确地列举出来,并为其下个定义,可以促进ROF 走向成功和流行。Dhananjay 讨论了以下几个方面的特征。

ROF 应有一个抽象层来将资源表示成端点

假设有一个 Order 资源,如果在 OrderController 上引入一个 Approve 方法,那么这种做法就和上述特征相违背。好的做法是建模一个 OrderApproval 资源,成功完成时,把 Order 资源的状态修改成“approved”

鉴于资源操作的一致性预期,这些动作将会魔术般地自动完成。

ROF 应提供典型的生命周期管理的附加支持。(如,验证)

框架提供资源接口方法的默认实现 [并且] 框架也应允许开发者插入或覆盖自己的实现。[并支持生命周期管理的任务,如验证。]

ROF 应可以让开发者覆盖和注册自己的方法以处理 PUT,POST 和 DELETE 操作带来的下游影响。

我曾把 REST 系统类比成一个 DBMS 系统,在这里客户端应用程序可以在数据库表(对应于 REST 的资源)上直接操作 SQL 语句,如 SELECT、INSERT、UPDATE、DELETE(对应于 HTTP/REST 中的 GET、PUT、POST 和 DELETE),而业务逻辑可以被实现为触发器。因此,框架应该为开发者提供定义触发器的机制。

ROF 应为开发者提供一种机制以让他们描述或映射资源抽象与实际程序结构之间的关系。

实现的方法很多,如 XML, YAML, DSL 和 Annotation——任你选择。另外,还可以定义实际的对象(如 POJO),它所映射的资源特征或这个类可以通过基于元数据的元数据编程让其在运行时暴露自己。框架应提供对(业务模型)关系的描述和内省(introspected)。

ROF 应支持跨资源的外键,把资源表现成映射底层业务对象引用的 URI。

资源通过 URI 引用其他资源,而底层业务对象通过对象引用指向其他业务对象。通过资源描述和 URI 映射,框架可提供 URI 和对象应用之间的透明的引用和 / 定位引用资源的机制。

ROF 应提供用于定位资源的工厂方法,或者应允许其他资源或业务对象的注入。

开发者可能从两个层面使用框架,粗粒度(资源)或细粒度(业务对象)。框架应该提供对这类活动的支持。

ROF 应允许资源或媒体类型描述与资源表示一起发送:因为 REST 支持媒体类型的自动发现和自动描述,框架也应该允许这类媒体类型的元数据信息对客户端可见。实际的元数据可以使用任何合适的典型标准描述,如 RDFa,XML 模式片段等。

2009 年 6 月 14 日 21:381873
用户头像

发布了 184 篇内容, 共 70.3 次阅读, 收获喜欢 5 次。

关注

评论

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

uni-app之条件判断详解【uni-app小程序开发】(二)

上进小菜猪

uni-app 6月月更

vue全局守卫

小恺

6月月更

《网络是怎么样连接的》读书笔记 - 认识网络基础概念(一)

懒时小窝

网络编程

异步任务处理系统,如何解决业务长耗时、高并发难题?

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算 FC

GNU/Linux知识库(3)- 命令行和包管理

冯亮

Linux DevOps GNU

列表视图——基于函数的视图 Django

海拥(haiyong.site)

Python django 6月月更

详解python的运行方式

左手の明天

Python 运行原理

关于分布式系统一致性

Joseph295

Java—虚拟机

武师叔

6月月更

NFT新范式,OKALEIDO创新NFT聚合交易生态

鳄鱼视界

华为云图引擎服务

程思扬

华为云 云开发

网上教学 助力战疫 | 社区征文

yu

原创 原创保护 初夏征文

读书笔记之《网络是怎样连接的》

菜农曰

开发 网络 计算机 后端开发

简约而不简单的Kanban方法

Bruce Talk

Kanban 敏捷开发 Agile

NFT新范式,OKALEIDO创新NFT聚合交易生态

EOSdreamer111

Java 应用压测性能问题定位经验分享

阿里巴巴云原生

阿里云 云原生 压测 性能压测

千万级学生管理系统的考试试卷存储方案

joak

力扣每日一练之数组下篇Day3

京与旧铺

6月月更

架构训练营模块四作业

融冰

NFT新范式,OKALEIDO创新NFT聚合交易生态

威廉META

架构实战营|模块4

KDA

#架构实战营

《清单革命》:如何忙而不乱?

郭明

读书笔记

OKALEIDO:NFT交易平台的发展趋势是什么?

石头财经

【mycat】mycat在windows环境下的安装和启动

迷彩

架构 mycat 数据库中间件 MySQL 数据库 6月月更

如何设计业务高性能高可用存储架构 - 作业

阿拉阿拉幽幽

TypeScript中你可能会忽略的细节

真嗣

typescript 前端

Scrapy框架初识

孤寒者

Python 爬虫 6月月更 scrapy框架

测试开发【Mock平台】07开发:项目管理(三)组件Modal和Form讲解,并利用其实现添加功能

MegaQi

测试平台开发教程 6月月更 测试技术干货

OKALEIDO:NFT交易平台的发展趋势是什么?

股市老人

Prometheus、Grafana安装配置linux服务器监控dashboard

橙子猿

golang Prometheus #Grafana

千万学生管理系统试卷存储方案

intelamd

「云智公开课」百度沧海·存储

「云智公开课」百度沧海·存储

面向资源的服务端框架的设计特征_SOA_Dilip Krishnan_InfoQ精选文章