当前情况
[HttpGet]
public HttpResponseMessage CheckProfileStatus(int id)
{
//check profile status from third party
return //profile status and HttpStatus;
}
[HttpGet]
public HttpResponseMessage ProcessTheProfile(int profileId)
{
//check profile status from third party again, if status is "Good", do something
return //someMessage and HttpStatus;
}
调用CheckProfileStatus
方法的网址
myUrl/api/Profile/123
调用ProcessTheProfile
方法的网址
myUrl/api/Profile/?profileId=123
我希望代码中的注释可以使情况变得清楚。
我真的不喜欢在一个控制器中有两个具有相同签名的HttpGet
方法(即使它可以工作)。
我不知道这是否是最佳实践。
问题:
我应该在两个单独的控制器中提取这两个方法,在一个控制器中具有两个具有相同签名的HttpGet方法是否完全可以,还是有更好的方法来处理这种情况?
答案 0 :(得分:1)
首先,这会使API的任何客户端感到困惑。
您有2个GET方法,它们实际上是相同的。实际上,大多数人都喜欢添加一条覆盖您的第一个选项的路由,该路由基本上将profileId设置为正斜杠后的值。
第二,期望是当您对具有ID的实体发出GET时,会得到该实体的表示形式。这不是这里发生的事情。
您需要确定所需的API。通用的,这样的东西就可以了:
myUrl/api/profile/process/123
或process/profile
或其他对API有意义的内容。
如果您的API应该是 RESTful (这基本上意味着每个HTTP动词只有一个方法,仅此而已),那么您需要为 ProcessProfile ,然后您的网址应如下所示:
myUrl/api/ProcessProfile/123
这些选项都不是一成不变的,只是这些选项。 对OP线程的注释也提供了一些不错的选择,应予以考虑。
答案 1 :(得分:0)
我认为,如果您的项目变得越来越大,因为使用起来很混乱,那么这种方法就会引起问题。
我建议您使用RESTful方法。
也许这篇文章会帮助您有所了解。
https://medium.com/@schneidenbach/restful-api-best-practices-and-common-pitfalls-7a83ba3763b5