关于RESTful api我有两个问题。
1。我们可以为GET,POST和PUT请求设置单独的DTO吗?是好的做法吗?或者我可以创建一个具有公共属性的抽象类,然后从中继承吗?
2。。在POST中发送嵌套的json请求是一种好习惯吗?
与以下文章相同:
https://code-maze.com/net-core-web-development-part6/
答案 0 :(得分:0)
是的,更重要的是,您应该。 DTO是特定情况下特定数据组的表示。在不同的请求类型之间,该数据可能会有所不同。每当传输不同的数据时,都应该使用不同的DTO来表示它。
如果愿意,您可以利用继承,这很有意义。但是,请注意,由于模型绑定的工作方式,您仍然需要将具体的派生类用作参数,而不是某些基类。 modelbinder将实例化由参数指定的类(因此它不能是抽象的),绑定在那个类上表示的任何请求值,并丢弃其余的值。因此,即使您绑定到BaseClass
,即使请求主体是BaseClass
的表示形式,您所拥有的只是DerivedClass
,而不是DerivedClass
。如果您随后尝试向下广播到DerivedClass
,则DerivedClass
特定的所有属性都将为null /默认值。
这既不是好习惯,也不是坏习惯。 JSON是一种对象表示格式。如果您的对象具有嵌套对象,那么您的JSON将具有嵌套JSON。
答案 1 :(得分:0)
不是根据请求类型创建DTO,而是为实体创建DTO。例如,您有一个Customer
实体,对于Customer
实体,您将创建一个Customer
DTO,并且相同的Customer
DTO可用于以下对象的GET,POST和PUT请求: Customer
实体。
我可以创建一个具有公共属性的抽象类,然后从其继承吗?
是的,您可以在创建DTO时使用继承,但是我要说的是,复杂化不会带来附加值,请记住,如果使用不当,继承会增加系统之间的耦合。
如Chris在他的答案中所述,如果您的对象具有嵌套的对象,则您的JSON将具有嵌套的JSON。