如何有两个相同符号的方法来删除REST服务的资源

本文关键字:方法 符号 删除 资源 服务 REST 两个 | 更新日期: 2023-09-27 18:12:50

我有一个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范式管理以下情况?

谢谢

如何有两个相同符号的方法来删除REST服务的资源

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

认为你是在担心有人调用了错误的方法?

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

DeleteNPsForCountry(country)

DeleteNPsById(np)

如果两个事物的行为不同,首先要避免给它们起相同的名字!特别是当没有其他保护手段时,您当前的方法具有相同的名称,甚至都接受int。从这里开始;而不是寻找解决办法!

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