asp.net-web-api - 是否有多个 Http Post 的最佳实践 - RPC 样式、自定义 MediaTypeFormatter 或其他
问题描述
我不是要开始一场圣战,而是寻找关于创建包含多个 HTTP 动词的 API 的最佳实践的文档。
我继承了一个 4.7.2 Web API 项目并试图理顺一些事情,并希望在未来的某个时候将其移至 .NET Core。
同时,我有一个将获得新功能的资源。为了简单起见,我们只说它是一个“文档”。
目前有一个 [HttpPost] 用于创建文档元数据。问题是扩展它以提供“克隆”、“拆分”、“合并”,所有这些都是创建类型,但都依赖于现有文档。
我可以走 RPC 风格
- api/document/{action}/{id}
- api/document/{id}/{action}
这与 HTTP REST 实现背道而驰。
第二种实现要好一些,但“动作”并不是真正的“资源”。
我的另一个选择是有一个看起来像底部代码的单个 HttpPost 并传递自定义内容类型。如果我走这条路,我必须实现一个 MediaTypeFormatter 否则我会生成一个异常。我目前已经实现并工作,当/如果我开始添加/更改以使用此方法时,这将是一场维护噩梦。
正如我所说,我在 4.7.2 上,所以 ConsumesAttribute 对我不可用。
我的问题是.... 有最佳实践吗????
想法?
[HttpPost]
public async Task<IHttpActionResult> Post([FromBody] string metadata)
{
var ct = Request.Headers["Content-Type"]
switch (ct)
{
// Call operation that will handle that Content Type which
// will deserialize document into a specific object type
}
}
Action Content Type
Create application/json
Clone application/vnd.mycompany.create-from-existing.v1+json
Split application/vnd.mycompany.split-from-existing.v1+json
Merge application/vnd.mycompany.merge-existing.v1+json
public class MyContentTypeToStringFormatter : MediaTypeFormatter { }
解决方案
推荐阅读
- html - 如何将用户输入添加到文本区域?
- amazon-web-services - 连接到 ec2 实例时出现奇怪的问题
- c - 如何在 C 中制作立体声?
- javascript - 乘以javascript时过高或过低时显示错误消息
- c - 如何在调整窗口大小时正确使用软件 SDL_Renderer?
- java - CodeNameOne 中的 javax.sound.sampled.LineUnavailableException
- go - 大量调用追加时的性能损失
- javascript - 没有“await”关键字的异步函数返回“未捕获(承诺中)错误”
- python - scipy.signal.find_peaks 的单个元素到多个元素
- javascript - 从 Node.js 中的 shell 命令获取数据/输出