如何使用两种相同符号的方法来删除 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 模棱两可。
我有一个 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 模棱两可。