[英]Seperate DTO for post and put request & nested json as post model
我有两个关于 RESTful api 的问题。
1.我们可以为 GET、POST 和 PUT 请求提供单独的 DTO 吗? 是好习惯吗
或者我可以制作一个具有公共属性的抽象 class 然后继承它吗?
2.在 POST 请求中发送嵌套的 json 是一种好习惯吗?
正如以下文章中所做的那样:
https://code-maze.com/net-core-web-development-part6/
是的,更重要的是,您应该. DTO 是特定场景中特定数据组的表示。 该数据在不同的请求类型之间可以并且将会有所不同。 任何时候传输不同的数据时,都应该有不同的 DTO 来表示它。
如果您愿意,可以使用 inheritance,这很有意义。 但是,请注意,由于模型绑定的工作方式,您仍然需要使用具体的派生类作为参数,而不是一些基本的 class。 modelbinder 将实例化参数指定的 class(因此它不能是抽象的),绑定该class 上表示的任何请求值,并丢弃 rest。 因此,如果您绑定到BaseClass
,您将拥有的只是BaseClass
,而不是DerivedClass
,即使请求正文是DerivedClass
的表示。 如果您随后尝试向下转换为DerivedClass
,则特定于DerivedClass
的所有属性都将为空/默认值。
这既不是好的做法,也不是坏的做法。 JSON 是一种 object 表示格式。 如果您的 object 有嵌套对象,那么您的 JSON 将嵌套 JSON。
DTO 不是根据请求类型创建的,而是为实体创建 DTO。 例如,您有一个Customer
实体,对于Customer
实体,您将创建一个Customer
DTO,并且相同的Customer
DTO 可用于Customer
实体的 GET、POST 和 PUT 请求。
我可以制作一个具有公共属性的抽象 class 然后继承它吗?
是的,您可以在创建 DTO 时使用 inheritance,但我会说这过于复杂而没有附加价值,请记住 inheritance,如果使用不当会增加系统中的耦合。
正如克里斯在他的回答中提到的那样,如果您的 object 有一个嵌套的 object 那么您的 JSON 将有嵌套的 Z0ECD18C1D7A287401DBB.8A23
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.