我试图了解如何使用REST endpoints 正确实现微服务模式 .
我理解它的基础知识 . 互联网充满了这一点 . 典型例子:
class User
{
public User GetUser(int id) { ... }
public User GetUsers() { ... }
public User PutUser(User user) { ... }
public User PostUser(User user) { ... }
}
所以,如果我想要一个 User
,那么我会对 GetUser(100)
执行一个 GET
请求,它会返回一个 User
对象作为JSON .
但是假设我有一个页面,我想列出所有用户的 firstname
和 lastname
. 然后我可以对 GetUsers()
做 GET
请求 . 但是如果 User
表在数据库中有 100
列,并且我只需要显示两列(firstname,lastname),那么获取其他98列就太过分了 .
也许在另一个页面上我需要显示100列中的40列 . 在100列的其他第20页上 .
这意味着我需要3个额外的终点才能返回所有用户 . 但每个终点应该返回不同的数据 .
-
如何命名这些新 endpoints ?
-
我是否必须通过名称明确调用这3个 endpoints ? (例如:
GetUsersNames()
GetUsersAge()
等?)
PS . 这可能是一个很糟糕的例子,但是我希望你能理解当我超越默认的 GET/PUT/POST/DELETE
方法时,我知道该做什么/如何命名 endpoints .
2 回答
你可以做的是明确地询问特定字段,所以:
这比引入新 endpoints 要好得多 .
您可以使用“属性路由”定义自定义视图 . 控制器中的方法默认使用您在配置中定义的路由模式 .
但是,您可以明确地定义其他路线 . 您需要在_1233397中包含此内容:
然后,您可以在控制器中定义其他路径并添加所需的过滤器逻辑:
参考:Attribute Routing in ASP.NET Web API 2
EDIT:
是的,并非所有选项都应在单独的 endpoints 中解决,但它在某一点上是一个选项 . 其他人做的事情:使用URI参数来限制返回的数据计数或设置标志,并通过方法的签名使它们可用,例如:
或者返回更短的用户对象: