gpt4 book ai didi

c# - 建议在 'DTO' 响应/请求中收集 REST/服务设计

转载 作者:行者123 更新时间:2023-11-30 22:22:03 25 4
gpt4 key购买 nike

只是学习 REST 和 ServiceStack 并寻求建议如何构建这个示例模式:

我有一个包含这些字段的 User 对象:

public class User
{
public string ID {get;set;
public string Name {get;set;}
public List<int> OrderID {get;set;} // inner collection
// all other fields
}

我有一个服务类:

public class UserService : Service
{
public List<User> Get(User UserRequest)
{
List<User> lstUsers = // Somehow polulate a collection of Users
return lstUsers;
}

// Other functions
}

和一个 AppHost 文件(目前是自托管的)

 public UserHost : AppHostHttpListenerBase
{
public override void Configure(Funq.Container container)
{
Routes
.Add<User>("/UserInfo")
.Add<User>("/User/{ID}");
}
}

一切正常:客户端(浏览器)发送一个空的“用户”请求并接收 User 对象的集合,但我需要添加的是获取特定的 User 要求。例如,我想接收(和更改)所有具有特定 User ID 的订单。

例如 ID = 2 的 User 有 10 个 OrderID 的集合。所以我虽然可以构建一个像这样的 URI:/MyHost/2/Orders,它会返回 Order 对象的集合。

我已经尝试添加另一个 DTO 对象 Order 并将其绑定(bind)到这样的路由:

  Route.Add<Order>("/User/{ID}/Oders")

但它不起作用。屏幕(至少在浏览器中)始终保持空白,似乎没有来自 SS 的响应。

这是一种 RESFull 做事方式吗?它如何在 ServiceStack 中实现?你能提供一个小代码示例(甚至是示意图)如何做到这一点吗?

最佳答案

如果要返回给定用户的订单列表,则绑定(bind)到 URL "/User/{ID}/Orders"是 RESTful 方式,是的。

对于 ServiceStack,我通常更喜欢定义请求和响应类,其中请求类将具有所有可能的输入参数,响应定义结果对象。虽然通常这些可以像 User 一样组合在示例中。

作为{ID} URL中的用户ID,最好命名为{UserID}并且在您的请求类中也有此属性。

也许您可以在 Order 上拥有 UserID类:

public class Order
{
public string ID { get; set; } // order ID
public string UserID { get; set; } // user ID - also request param
// ...
}

Routes.Add<Order>("/User/{UserID}/Oders");

现在,URL 中的 UserID 映射到您的 UserID 属性,您可以使用它来查询数据库等。

每个请求类通常对应于具有您的应用逻辑的另一个服务类。因此,

  • User你有UserService : RestServiceBase<User> ,
  • OrderOrderService : RestServiceBase<Order> .

当 ServiceStack 看到这个 URL 映射时 Routes.Add<Order>("/User/{UserID}/Oders")它知道调用 OrderService对于给定的 URL。

public class OrderService : RestServiceBase<Order>
{
public override object OnGet(Order request)
{
// ...
}
}

关于c# - 建议在 'DTO' 响应/请求中收集 REST/服务设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14011946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com