首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >REST是否破坏了数据封装?

REST是否破坏了数据封装?
EN

Stack Overflow用户
提问于 2013-09-05 12:38:25
回答 2查看 796关注 0票数 4

我正在尝试理解RESTful API的范围和限制。我的具体问题是:我如何使用REST处理公开操作而不是资源的API?我是否应该放弃公开操作的诱惑,重新考虑API来公开数据(资源)。来自OOP,感觉就像是对对象封装的公然违反。

假设您需要公开一个REST API来完成资金转移:将一笔金额从一个帐户转移到另一个帐户。如果我理解REST,这两个帐户应该作为资源公开,并且必须在这两个资源上调用两个不同的更新操作。对我来说,这明显违反了数据封装。我倾向于创建一个API来建模“转账”操作,而不是资源“帐户”。我可以创建一个执行“数据传输”的REST API吗?它不再是REST (因为它似乎不是以资源为中心的)。

对于这种情况,RPC调用看起来比REST更合适,您有什么看法?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-09-05 13:12:42

我认为迁移本身就是一种资源,有自己的生命周期。我们可以放置一个转移资源(在业务术语中)来启动转移。转账资源为账号资源,其他资源为RESTful。

我们可以获得传输资源,以便确定其状态。

例如,如果某些信息不完整,我们甚至可以发布资源的更新。

票数 5
EN

Stack Overflow用户

发布于 2013-09-05 13:19:55

这真的取决于你的喜好。以纯粹的REST方式定义您的APIS,或者使用一些宽松的方式由您决定。

REST标准化了定义API的方式,以便于维护。

例如,在SOAP时代,如果你必须使用create/modify/delete帐户,就会有三种不同的接口定义,比如createAcct。updateAccount,deleteAccount.

现在使用REST,您只需定义一个/accounts/,并假定GET、PUT、POSTDELTE 方法执行相应的操作。

为了回答您的问题,可以通过两种方式定义API

1) - /accounts/1234/transfer/或将json body *{to_account:1212,amount:1221}*作为请求的一部分发布。这不是一种纯粹的REST方式

。因为您正在将action定义为API的一部分。

type 2)- /accounts/1234/transactions - json body *{:transfer,to_account:1212,amount:1212}*-这是纯粹的REST方式,因为事务是您将在系统中创建的一种新资源。

对于许多rest apis来说,纯REST方式是有例外的。其中一个例子就是‘'resetpassword’‘。尝试使用firebug破解一些apis,您将对此有大致的了解

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18627862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档