假设我们有集合/items/
,我们要允许客户端增加新项目到这个集合。通过Rails的启发,我得出如下:我们只需添加资源/items/new
,谁想要添加项目首先发出GET /items/new
,接收空实体(可能与一些默认值设定)之一,然后充满希望的领域和问题POST /items/
。创建新的文档(实体),将其添加到收藏
- 此方法适用于真正的REST API吗?什么可以改进/重做?
- 如果突然这种做法是很好的(如果不是,反正):
假设每个项目都有必填字段标题。回复
GET /items/new
回复默认值可能不太好。 在这种情况下有什么更好?要返回null
标题并且在POST空白时返回错误?要为new
资源实现类似构造器的逻辑,请求查询字符串中的必填字段?还有别的吗?
UPD。只是为了澄清,使用new
不是关于将“添加”分割为“分配”和“写入内容”,因为没有对数据存储的操作在GET /items/new
上完成。它意味着实现实体设计的灵活性:富客户端可根据响应新事件而动态呈现输入字段。那有意义吗?或者合同是固定的,我们需要为这样的改变版本API?
我同意。为什么要为数据访问服务提供类似于构造函数的功能。你可以把这些东西放在客户端。 – lavrik 2013-03-11 16:52:32
@creinig:在[Rails]中查看[this](http://guides.rubyonrails.org/getting_started.html#creating-new-posts)。它不会将“添加”到“分配”和“写入内容”中,因为没有对数据存储的操作在GET/items/new上完成。它意味着实现实体设计灵活性的一种方式:富客户端可以根据响应“新”的动态呈现输入字段。那有意义吗? – starteleport 2013-03-11 17:07:51
@starteleport:好的,有效的点。但是,如果这是需要的,它应该被明确地建模为两个单独的动作。你链接的rails教程也是这样(动作'新'和'创建')。它也允许在没有前面的“新”的情况下调用“创建”。 – creinig 2013-03-11 17:43:37