使API负责存储文件。
File
数据模型看起来像这样
public class File
{
public Guid Id { get; set; }
public string Path { get; set; }
public string Contents { get; set; }
}
因此,通过我在控制器中设置的发布请求(用于创建文件),我需要文件的id
,文件path
将被存储(相对于我的根路径已预先配置)和文件的contents
。
我想知道是否更好的做法是要求将File
数据模型传递到请求的正文中,还是将id
和path
都用作查询参数以及请求正文中的contents
。
答案 0 :(得分:0)
TL; DR -对正文中的内容使用PUT /files/{id}
。
这取决于-File
的(对您的系统唯一)身份是什么?我在这里假设它是客户端传递的Id
,而Path
只是元数据。如果路径也是身份的一部分,则需要相应地进行调整。
由于提供和确定身份的是 client ,因此您可能应该更喜欢PUT
而不是POST
,并在路径中提供身份;例如PUT /files/{id}
中包含路径和内容。随后的相同PUT
使系统处于相同状态,因此满足了PUT
对观察者是幂等的要求。随后的不相同的PUT
更新现有内容。
HTTP规范在此处具有一定的灵活性,因此您可以 使用POST
。 latest稍微改变了POST
的定义(以更广泛地应用),但在original(强调我的)中……
POST方法用于请求源服务器接受请求中包含的实体作为请求行中Request-URI所标识资源的新下属。
...很明显POST /files
可以创建例如目录中的文件(以他们的示例为例),但是POST /files/{id}
的意义不大。
This discussion在PUT和POST上还有更多内容。在那里还宣称:
请注意,这是一个错误:
POST /questions/<new_question> HTTP/1.1 Host: www.example.com/
如果 URL尚未创建,您不应该使用POST来创建它 在指定名称时。这应导致“资源不 找到”错误,因为尚不存在。你应该把 服务器上的资源。