C# Web Api - returning DTO 时移动应用程序的最佳实践?多个请求或 return 一次全部?
C# Web Api - Best Practices for Mobile Applications when returning DTO? Multiple Requests or return Everything at once?
我正在构建一个移动应用程序,我正在使用 WebApi 作为后端。该应用程序允许用户虚拟设计他们的家。
所以,考虑到每个 属性 都是唯一数量的房间和房间类型(即车库、棚屋等),这对我创建的所有属性都不常见
简介的想法。请记住,我正在创建一个应用程序,让您可以虚拟地布置您的家。这意味着每个 属性 都有一个配置文件
翻译如下:
特别感兴趣
我需要能够从我即将构建的 UI 中捕获此内容:
属性 个人资料摘要(参考如下)
Id | Name | Quantity
--------------------
1 | Master Bed Room | 1
2 | Standard Bed Room | 4
3 | Master Bathroom | 1
4 | Bathroom | 3
5 | Kitchen | 1
6 | Living Room | 1
7 | Garage | 1
以下是我希望我的 return DTO 从 WebApi 调用中查看的方式。 (这描述了上面的前两行:(Master Bed Room, Standard Bed Room))
这里假设我通过虚拟界面在主卧室添加了一张特大床,在 4 个标准卧室添加了双床
{
Property:
[
{
Id: 1,
Name: 'Sample Property',
StreetAddress1: '123',
...,
Profile:[
{
Area: {Id: 1, Name: 'Master Bed Room', Type: {...}},
Quantity: 1,
Profiles: [
{
Id: 1,
LineItems: [
Id: 1,
Name: 'King Size Bed',
...
]
}
]
},
{
Area: {Id: 2, Name: 'Standard Bed Room', Type: {...}},
Quantity: 4,
Profiles: [
{
Id: 2,
LineItems: [
Id: 2,
Name: 'Twin Size Bed',
...
]
},
{
Id: 3,
LineItems: [
Id: 3,
Name: 'Twin Size Bed',
...
]
},
{
Id: 4,
LineItems: [
Id: 4,
Name: 'Twin Size Bed',
...
]
},
{
Id: 5,
LineItems: [
Id: 5,
Name: 'Twin Size Bed',
...
]
}
]
},
]
}
]
}
我的问题如下:
我想知道构建 WebApi 调用或任何值得阅读的好文章的最佳实践是什么。我可以 return 基于用户的整个对象
登录时的id
优点是在移动应用程序(不是网络应用程序而是移动应用程序)中假设一个人最多有两个属性。 (这只是一个概念证明 - 但我会
想知道什么(如果有的话)是最佳实践)。我还可以开发 WebApi,以便执行以下操作:
User Login -->
<-- Return Properties
User Selects Property -->
<-- Return Property Profile Summary (referenced above)
User wants to drill down on particular room (Standard Room) -->
<-- Return standard room overview line items (the Profiles[] from the above object)
User want to see the products (line items) for a given Standard Room (1 of the 4 selected) (Area: {Id: 2} from above object) -->
还有类似的东西?
最佳做法是什么?
不错的选择是使您从 Web API 编辑的模型 return 适应应用程序中的屏幕和表单。这意味着您不应该 return 实体,而是将其转换为根据您的应用需求设计的数据传输对象。
如果您的应用有一些屏幕的列表,例如 "projects" 包含房间总数和上次修改日期,"rooms" 包含所有家具的总成本,还包含包含所有家具的详细信息页面混凝土房间中的产品及其数量,您的数据库包含几个表,如 "RoomTypes"、"Rooms"、"Products"、"ProductPrices"、"ProductTypes"、"Projects"那么你已经有了数据库对象的实体,应该为你的表单添加模型类:
public class ProjectListItem
{
public int ProjectId { get; set; } // you need this field for identification and navigation
public DateTime LastModifiedDate { get; set; }
public int Rooms { get; set; }
}
public class RoomListItem
{
public int RoomId { get; set; }
public string Name { get; set; }
public int Area { get; set; }
public decimal TotalCost { get; set; }
}
public class RoomDetailsItem
{
public int RoomId { get; set; }
public string Name { get; set; } // ok, that looks like you can select a base class for this models
public int Area { get; set; }
public ICollection<ProductModel> Products { get; set }
}
public class ProductModel
{
public string Name { get; set; }
// public decimal BestPrice { get; set; } // you should not add this property because your "details" page not contained this info
public int Quantity { get; set; }
}
好的,现在你的 API 看起来像下一个:
/api/v1/Projects
- return 是 ProjectListItem
的集合
/api/v1/Projects/{projectId}
- return 是 RoomListItem
的集合
或包含此系列的模型
/api/v1/Projects/{projectId}/{roomId}
- return一个RoomDetailsItem
您需要在 API 中将您的实体转换为该模型。存储模型应根据您的应用程序需求(快速检索或避免重复)进行优化,您的演示模型应根据您的应用程序需求进行优化。
我正在构建一个移动应用程序,我正在使用 WebApi 作为后端。该应用程序允许用户虚拟设计他们的家。
所以,考虑到每个 属性 都是唯一数量的房间和房间类型(即车库、棚屋等),这对我创建的所有属性都不常见 简介的想法。请记住,我正在创建一个应用程序,让您可以虚拟地布置您的家。这意味着每个 属性 都有一个配置文件 翻译如下:
特别感兴趣
我需要能够从我即将构建的 UI 中捕获此内容:
属性 个人资料摘要(参考如下)
Id | Name | Quantity
--------------------
1 | Master Bed Room | 1
2 | Standard Bed Room | 4
3 | Master Bathroom | 1
4 | Bathroom | 3
5 | Kitchen | 1
6 | Living Room | 1
7 | Garage | 1
以下是我希望我的 return DTO 从 WebApi 调用中查看的方式。 (这描述了上面的前两行:(Master Bed Room, Standard Bed Room))
这里假设我通过虚拟界面在主卧室添加了一张特大床,在 4 个标准卧室添加了双床
{
Property:
[
{
Id: 1,
Name: 'Sample Property',
StreetAddress1: '123',
...,
Profile:[
{
Area: {Id: 1, Name: 'Master Bed Room', Type: {...}},
Quantity: 1,
Profiles: [
{
Id: 1,
LineItems: [
Id: 1,
Name: 'King Size Bed',
...
]
}
]
},
{
Area: {Id: 2, Name: 'Standard Bed Room', Type: {...}},
Quantity: 4,
Profiles: [
{
Id: 2,
LineItems: [
Id: 2,
Name: 'Twin Size Bed',
...
]
},
{
Id: 3,
LineItems: [
Id: 3,
Name: 'Twin Size Bed',
...
]
},
{
Id: 4,
LineItems: [
Id: 4,
Name: 'Twin Size Bed',
...
]
},
{
Id: 5,
LineItems: [
Id: 5,
Name: 'Twin Size Bed',
...
]
}
]
},
]
}
]
}
我的问题如下:
我想知道构建 WebApi 调用或任何值得阅读的好文章的最佳实践是什么。我可以 return 基于用户的整个对象 登录时的id
优点是在移动应用程序(不是网络应用程序而是移动应用程序)中假设一个人最多有两个属性。 (这只是一个概念证明 - 但我会 想知道什么(如果有的话)是最佳实践)。我还可以开发 WebApi,以便执行以下操作:
User Login -->
<-- Return Properties
User Selects Property -->
<-- Return Property Profile Summary (referenced above)
User wants to drill down on particular room (Standard Room) -->
<-- Return standard room overview line items (the Profiles[] from the above object)
User want to see the products (line items) for a given Standard Room (1 of the 4 selected) (Area: {Id: 2} from above object) -->
还有类似的东西?
最佳做法是什么?
不错的选择是使您从 Web API 编辑的模型 return 适应应用程序中的屏幕和表单。这意味着您不应该 return 实体,而是将其转换为根据您的应用需求设计的数据传输对象。
如果您的应用有一些屏幕的列表,例如 "projects" 包含房间总数和上次修改日期,"rooms" 包含所有家具的总成本,还包含包含所有家具的详细信息页面混凝土房间中的产品及其数量,您的数据库包含几个表,如 "RoomTypes"、"Rooms"、"Products"、"ProductPrices"、"ProductTypes"、"Projects"那么你已经有了数据库对象的实体,应该为你的表单添加模型类:
public class ProjectListItem
{
public int ProjectId { get; set; } // you need this field for identification and navigation
public DateTime LastModifiedDate { get; set; }
public int Rooms { get; set; }
}
public class RoomListItem
{
public int RoomId { get; set; }
public string Name { get; set; }
public int Area { get; set; }
public decimal TotalCost { get; set; }
}
public class RoomDetailsItem
{
public int RoomId { get; set; }
public string Name { get; set; } // ok, that looks like you can select a base class for this models
public int Area { get; set; }
public ICollection<ProductModel> Products { get; set }
}
public class ProductModel
{
public string Name { get; set; }
// public decimal BestPrice { get; set; } // you should not add this property because your "details" page not contained this info
public int Quantity { get; set; }
}
好的,现在你的 API 看起来像下一个:
/api/v1/Projects
- return 是ProjectListItem
的集合
/api/v1/Projects/{projectId}
- return 是RoomListItem
的集合 或包含此系列的模型/api/v1/Projects/{projectId}/{roomId}
- return一个RoomDetailsItem
您需要在 API 中将您的实体转换为该模型。存储模型应根据您的应用程序需求(快速检索或避免重复)进行优化,您的演示模型应根据您的应用程序需求进行优化。