RESTAPI用于POST和GET/PUT的不同模型

RESTAPI用于POST和GET/PUT的不同模型,rest,architecture,Rest,Architecture,我正在设计一个RESTAPI。正如您所知,RESTful API没有真正的规范。 在我的例子中,我有一个简单的API,其中有用户。 我可以获得用户,更新他们。大概是这样的: 获取…/users/12 但是,对于创建用户,我希望只允许属性的子集。 例如。 当您获得一个用户时,您将获得许多属性,如: 身份证件 名称 创建日期 等等 当您创建一个用户时,我只想允许发布名称,而不允许发布其他内容。 在理解RESTful服务时,是否允许对同一资源的不同http谓词使用不同的模型? 或者你会期望 发布../

我正在设计一个RESTAPI。正如您所知,RESTful API没有真正的规范。 在我的例子中,我有一个简单的API,其中有用户。 我可以获得用户,更新他们。大概是这样的:

获取…/users/12

但是,对于创建用户,我希望只允许属性的子集。 例如。 当您获得一个用户时,您将获得许多属性,如: 身份证件 名称 创建日期 等等

当您创建一个用户时,我只想允许发布名称,而不允许发布其他内容。 在理解RESTful服务时,是否允许对同一资源的不同http谓词使用不同的模型? 或者你会期望

发布../用户

可以具有与获取现有属性时获得的属性完全相同的属性

还是你认为我不应该这样做? 在阅读了许多宗教讨论之后,我只是想知道;)

先谢谢你 最好的
Laurin

首先:我认为Roy Fieldings的论文中对RESTful架构风格有一个很好的定义

第二:我认为你们有一个小小的误解,休息不是关于模型或控制器,而是关于资源。模型和资源之间通常存在一对一的关系,但这不是必需的


第三:要实现您的需求,您只需要一个
用户
模型。当API用户发布的参数超过您允许的参数时,只需忽略它们,并仅使用您希望在新创建的模型上设置的参数。或者,如果您不想忽略它们,请返回
400错误请求
HTTP状态。

嗨,约翰,谢谢您的回复!这对我很有帮助:)如果客户端应用程序直接使用这些模型呢?然后,当你写文章时,对象上有很多不必要的属性…我认为这不是问题,因为忽略属性很容易。为什么他们要直接使用相同的模型,因为它会将自己耦合到一个它不控制的数据模型。如果不需要松耦合,那么在一个大系统的两个组件之间就不需要HTTP API。