【问题标题】:How to have 2 method with same sign to delete resource of REST service如何使用 2 种具有相同符号的方法来删除 REST 服务的资源
【发布时间】:2017-02-22 13:44:19
【问题描述】:

我有一个 REST 服务,我应该有两个删除方法。每个方法只需要一个 ID。

第一种方法删除A LOT OF元素:

[HttpDelete]
public IHttpActionResult DeleteNPs(int countryId)
{
    ...
    return Ok();
}

第二种方法只删除一个元素:

[HttpDelete]
public IHttpActionResult DeleteNP(int npId)
{
    ...
    return Ok();
}

如您所见,标志相同,但效果完全不同。我曾想过用两个参数创建第二种方法,如下所示:

[HttpDelete]
public IHttpActionResult DeleteNPs(int countryId, int npId)
{
    ...
    return Ok();
}

但这是一个非常糟糕的解决方法......在第二种情况下,我也没有国家 ID。我必须如何使用 REST 范例来管理以下情况?

谢谢

【问题讨论】:

  • 为什么不为每种方法使用不同的路径?
  • 你的意思是我应该为每种方法设置两条不同的路线?这是 REST 服务的正确方法吗?
  • @Ciccio 请不要让“正确的方法”战胜您对“正确实施”的感觉。
  • 你是对的.. 但如果我有时间花时间,我更喜欢以正确的方式做事...... 而不仅仅是“工作”的方式
  • @Ciccio - 请记住 REST 只是一个术语,它的实现取决于您的需求。 API 的结构主要取决于您的领域,而不仅仅是 REST 决定因素。

标签: c# rest http-delete


【解决方案1】:

恕我直言,如果您真的依赖某些 REST 标准,那么您的设计就有问题。

通常你会有以下方法:

[HttpDelete]
public IHttpActionResult DeleteNPs()
{
    ...
    return Ok();
}

[HttpDelete]
public IHttpActionResult DeleteNP(int npId)
{
    ...
    return Ok();
}

如果你想引入一个参数,你应该引入另一个方法:

[HttpDelete]
public IHttpActionResult DeleteNPsByCountryId(int countryId)
{
    ...
    return Ok();
}

并附上例如以下路线:

  • DELETE /api/np
  • DELETE /api/np/1
  • DELETE /api/np/country/1

在其他情况下,您会使 API 模棱两可。

【讨论】:

  • @Ciccio - 不知何故 - 是的。你可以为这种动作创建一个子控制器,但最后你仍然需要创建一个子路由来正确处理它。
【解决方案2】:

认为您担心有人调用“错误”方法?!

如果是这样,我认为唯一合理的答案是:重命名这两个方法!

喜欢

DeleteNPsForCountry(country)

DeleteNPsById(np)

如果两件事情的行为不同,一开始就避免给它们取相同的名字! 特别是,当没有没有其他保护手段时 - 您当前的方法具有相同的名称,甚至都采用 int。所以 - 从那里开始;而不是寻找解决方法!

当然,您也可以使用不同的路径向客户展示它们!

【讨论】:

  • 对不起,我把第二种方法的名字弄错了......当然,这两种方法有不同的名字(符号相同),否则我的程序都不会编译......然后,这个是一个 REST 服务,所以我不是按名称调用方法,而是 Http 动词是区分因素
  • 但在某种程度上还是将请求传入的 URL 映射到实际方法,对吧?!
  • 我不确定我是否理解你...我认为映射只是在 http 动词上完成...
  • 休息服务仍然可以在某些 URL 上运行。一些 HTTP 客户端连接到某个 URL,该 URL(当然还有操作)驱动应该执行哪些代码。
猜你喜欢
  • 1970-01-01
  • 2016-03-15
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多