如何使用两种相同符号的方法来删除 REST 服务的资源

How to have 2 method with same sign to delete resource of REST service

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

第一种方法删除了很多元素:

[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 范式来管理以下情况?

谢谢

认为你担心有人调用"the"错误的方法?!

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

喜欢

DeleteNPsForCountry(country)

DeleteNPsById(np)

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

当然,对于客户,您会使用不同的路径呈现它们!

恕我直言,如果您真的依赖某些 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 模棱两可。