如果资源与其他资源有关系,如何设计RESTful API?
假设我有两个资源,如果资源与其他资源有关系,如何设计RESTful API?,rest,transactions,Rest,Transactions,假设我有两个资源,Account和User。当有新用户注册时,发送到/account的帖子将创建一个帐户。但是帐户和用户之间存在如下关系: 用户属于帐户 帐户有许多用户 用户是帐户中的外键约束(即,没有用户,我无法创建帐户) 因此,对/account的POST请求将创建帐户和用户。在这种情况下,由于我创建/修改了2个资源而不是一个资源,这是否违反了RESTful原则 为了便于讨论,假设必须在事务中创建帐户和用户(即,如果用户未能创建,则也不会创建帐户) 如何设计一个RESTful API来修改与
Account
和User
。当有新用户注册时,发送到/account
的帖子将创建一个帐户。但是帐户
和用户
之间存在如下关系:
用户
属于帐户
帐户
有许多用户
用户
是帐户
中的外键约束(即,没有用户
,我无法创建帐户
)/account
的POST请求将创建帐户
和用户
。在这种情况下,由于我创建/修改了2个资源而不是一个资源,这是否违反了RESTful原则
为了便于讨论,假设必须在事务中创建帐户
和用户
(即,如果用户
未能创建,则也不会创建帐户
)
如何设计一个RESTful API来修改与其他资源有关系且必须在单个事务中发生的资源?对于更新其他资源的一个资源更新,没有REST原则,但您应该在响应中通知客户端更新的资源 考虑以下几点(我引用了菲尔丁的话):
资源是到一组实体的概念映射,而不是在任何特定时间点对应于映射的实体 假设有一个资源
/last\u user
,它返回有关请求另一个资源/book\u info
信息的最后一个用户的信息。现在,只要客户端使用/book\u info
,就会更新资源/last\u user
,而此更新甚至不是通过/last\u user
资源完成的
关于更新其他资源的资源更新的设计,请考虑以下内容:
- “任何可以命名的信息都可以是资源”,包括“其他资源的集合”
- “REST将所有控件状态集中到响应交互而接收的表示中。”
- “默认情况下,对检索请求的响应是可缓存的,而对其他请求的响应是不可缓存的。”“组件可以通过包含将交互标记为可缓存、不可缓存或仅在有限时间内可缓存的控制数据来覆盖这些默认值。”
单一事务要求是服务器端实现细节,我认为在大多数情况下,资源的创建和/或更新将导致单个数据库事务,涉及多个(相关)数据库记录(例如审计记录)的创建和/或更新.我不确定从你的解释中我是否理解了
帐户
和用户
之间的关系。无论如何,您可以将user
视为一个属性。即,使用嵌入的用户创建资源帐户
,这只是另一个属性。希望能有帮助。