【发布时间】:2019-10-03 17:19:53
【问题描述】:
我正在使用 ServiceStack 创建我的第一个 API。 在我的服务中,用户可以输入新订单并检索他已经执行的订单。 每个订单都有一个非常复杂的结构,由各种字段和对象列表组成(其中一些包含 10 或 100 个项目,其他包含数千条记录,因此需要分页)。
问题是:向客户端发送什么和多少数据。
假设,当客户请求上次执行订单的列表时,我应该提供一个包含少量字段的订单列表。
当客户要求提供订单的详细信息时,我可以给他更多信息。
在 REST 世界中,我看到了 2 种技术:
[视图]参数
/orders?view=list
/orders?view=detail
可以是“list | detail”,它提供了所请求对象的更简洁或更详细的版本。
[展开]参数
/orders?expand=customer
/orders?expand=customer,address,phones,address
允许指定要检索的字段
这样,无论用户请求对象列表还是详细信息,他都可以指定他想要接收的信息量。
This solution 被 Stripe.com 采用,还提供了一个 c# 客户端。
https://github.com/stripe/stripe-dotnet/blob/master/src/Stripe.net/Entities/ExpandableField.cs
如何使用 ServiceStack 实现这些解决方案,尤其是通过 http 和 ServiceStack.Client 都可以使用相同的 api?
创建两种类型的 DTO 是否是个好主意?
OrderDTO(包含少量字段)
OrderDetailDTO(包含所有 字段)
【问题讨论】:
标签: servicestack