这是我第一次在网络API中看到这种做事方式。
因此,让我将您放在上下文中:
我有一个网络API,其中有两条路由:
[HttpGet]
[Route("message-activity")]
public PagedResult<AuditedMessage> GetMessageActivity(int page)
{
}
[HttpGet]
[Route("message-activity/{messageID}")]
public AuditedMessage GetMessage(string messageID)
{
}
谈论webApi的良好做法。 -第一种方法可以接受吗? -这样对吗? -第二种方法有什么问题吗?
谢谢!
答案 0 :(得分:2)
使用第一种方法,将使用查询字符串指定参数。
即:message-activity?page=paramValue
使用第二种方法时,您只需在API调用URL中传递参数
即:message-activity/paramValue
这两种方法均能正常工作
答案 1 :(得分:1)
根据您已编辑的问题: 可能有问题,也可能没有。 详细说明:第二个版本仅返回单个结果,第一个版本返回分页的结果列表。 如果我有一个现有的messageID,而我仅对此消息感兴趣,则第二个最好。 如果需要显示消息列表,则第一个消息要好得多。 在普通的CRUD控制器上,我希望这两种方法都可以。
答案 2 :(得分:0)
说实话,我不喜欢任何一个。
为什么?
让我们看看第一个:
GetMessageActivity(int page)
如果您希望它有意义并分页结果,那么它可能看起来像这样:
[HttpGet]
[Route("message-activity")]
public PagedResult<MessageActivity> GetMessageActivity(string messageID, int pageSize, int pageNumber)
{
}
当然您会更新路线以匹配该路线。
这对我来说更有意义。您返回此MessageActivity数据,无论是什么,而不是消息。如果要返回消息,请像第二种方法一样返回消息。
第二个也很奇怪:
[HttpGet]
[Route("message-activity/{messageID}")]
public AuditedMessage GetMessage(string messageID)
{
}
好吧,如果您要加载一条消息,则路由应该是消息,而不是消息活动。
类似的东西:
[HttpGet]
[Route("message/{messageID}")]
public AuditedMessage GetMessage(string messageID)
{
}
我会同时更改两者,这样才有意义。 API是为客户编写的,这些客户需要非常快速地了解发生了什么。
您无法比较两者所指的不同之处。您想处理一条消息,那么您的路线,参数和输出就需要反映出来。如果您想使用此MessageActivity,请让您的端点反映出来