是否有多个 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 { }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)