return 匿名类型响应 HTTP GET 请求是好的做法吗?
Is it good practice to return anonymous type in respond to HTTP GET request?
我的网站 API 其中 ProductsByCategory
的 GET 端点之一 return 集合。
public async Task<ActionResult<IEnumerable<ProductsByCategory>>> GetProductsByCategories()
{
var productsByCategories = await northwindContext.Categories.Select(category => new ProductsByCategory
{
CategoryName = category.CategoryName,
ProductCount = category.Products.Count
}
).ToListAsync();
return productsByCategories;
}
但我知道 JSON 甚至 XML 不需要类型名称。他们只需要 属性 的名称及其值。所以我有另一种方法来实现这个方法(使用匿名类型):
public async Task<ActionResult<IEnumerable>> GetProductsByCategories()
{
var productsByCategories = await northwindContext.Categories.Select(category => new
{
CategoryName = category.CategoryName,
ProductCount = category.Products.Count
}
).ToListAsync();
return productsByCategories;
}
我喜欢第二种方法,因为我不需要编写 ProductsByCategory 等类型的代码,而且在我看来更合乎逻辑,因为 JSON(XML) 不需要类型名称 I不需要创建非匿名类型。但这就是我的全部想法,我在 ASP .NET Core 领域还很陌生,我可能会遗漏某些部分,而且我的猜测是错误的。那么传递匿名类型的集合作为对 HTTP GET 请求的响应是好的做法还是指定集合保留的项目类型更好?
没错,您将得到相同的结果序列化对象(xml、json),并且您可以使用匿名类型。但你应该记住:
- 当您明确定义结果 class 时,您的代码将是
清洁工
- 对于明确定义的结果 class 您可以定义一些验证
使用序列化器属性的规则
- 如果您使用文档工具,例如 swagger,您还可以使用属性来提供额外的文档。
Api不应该有歧义。
一切都取决于您的喜好。如果你想使用匿名类型,你可以。
我的网站 API 其中 ProductsByCategory
的 GET 端点之一 return 集合。
public async Task<ActionResult<IEnumerable<ProductsByCategory>>> GetProductsByCategories()
{
var productsByCategories = await northwindContext.Categories.Select(category => new ProductsByCategory
{
CategoryName = category.CategoryName,
ProductCount = category.Products.Count
}
).ToListAsync();
return productsByCategories;
}
但我知道 JSON 甚至 XML 不需要类型名称。他们只需要 属性 的名称及其值。所以我有另一种方法来实现这个方法(使用匿名类型):
public async Task<ActionResult<IEnumerable>> GetProductsByCategories()
{
var productsByCategories = await northwindContext.Categories.Select(category => new
{
CategoryName = category.CategoryName,
ProductCount = category.Products.Count
}
).ToListAsync();
return productsByCategories;
}
我喜欢第二种方法,因为我不需要编写 ProductsByCategory 等类型的代码,而且在我看来更合乎逻辑,因为 JSON(XML) 不需要类型名称 I不需要创建非匿名类型。但这就是我的全部想法,我在 ASP .NET Core 领域还很陌生,我可能会遗漏某些部分,而且我的猜测是错误的。那么传递匿名类型的集合作为对 HTTP GET 请求的响应是好的做法还是指定集合保留的项目类型更好?
没错,您将得到相同的结果序列化对象(xml、json),并且您可以使用匿名类型。但你应该记住:
- 当您明确定义结果 class 时,您的代码将是 清洁工
- 对于明确定义的结果 class 您可以定义一些验证 使用序列化器属性的规则
- 如果您使用文档工具,例如 swagger,您还可以使用属性来提供额外的文档。
Api不应该有歧义。 一切都取决于您的喜好。如果你想使用匿名类型,你可以。