Java 哪一个更好:返回响应对象还是表示rest资源的对象?
在一些书籍中,restapi通常返回一个Response对象,该对象封装了一些表示有效负载、状态等的其他对象 另一方面,我所看到和编写的许多API都将POJO(或称之为DTO)作为JSON返回,这是客户端使用的API 这可能是基于意见的,但我想知道在高可伸缩性环境中使用这两种方法中的哪一种更好,在这种环境中,一些请求会导致成功,而另一些请求会导致失败/数据未返回 我想知道是否有公认的更好的做法。这将帮助我设计一些API,并在我的团队面前正确地看待问题。但是,如果“两者中最好的”是基于太多的观点,我同意这个问题被关闭 谢谢 更新: 这两个restapi如下所示。避免使用诸如@Path、@Get、@PathParam、@products等代码Java 哪一个更好:返回响应对象还是表示rest资源的对象?,java,rest,Java,Rest,在一些书籍中,restapi通常返回一个Response对象,该对象封装了一些表示有效负载、状态等的其他对象 另一方面,我所看到和编写的许多API都将POJO(或称之为DTO)作为JSON返回,这是客户端使用的API 这可能是基于意见的,但我想知道在高可伸缩性环境中使用这两种方法中的哪一种更好,在这种环境中,一些请求会导致成功,而另一些请求会导致失败/数据未返回 我想知道是否有公认的更好的做法。这将帮助我设计一些API,并在我的团队面前正确地看待问题。但是,如果“两者中最好的”是基于太多的观点,
public Response myCustomerObject(int id){...}
这将返回封装在响应对象中的客户对象。响应也可能是错误
以下方法将直接返回客户实体:
public Customer myCustomerObject(int id){...}
我会投票支持一个API,它会给你一个响应对象。这允许您在代码中完全控制响应,并且很清楚响应中会发生什么。如果您想编写一个不能用POJO轻松表示的响应,则不必使用非直观的解决方法 从rest处理程序方法返回一个对象,然后将其转换为响应,这对我来说是太多的框架魔法了
最糟糕的做法是从rest处理程序方法返回字符串,然后将其解释为模板引用(例如,JSP资源的路径),然后将其写入响应。再一次太神奇了 一个返回的响应对象包含您的数据,它将继承SOAP和HTTP等请求/响应服务,但REST服务建立在资源概念之上,而不是请求/响应,因此我更喜欢使用对象来表示您的实际资源,而不使用包装器,rest服务如何在响应对象上直接表示您的资源,例如。如果您调用的是类似于car的资源: 获取车辆列表 获取id为1的车辆
如何在响应对象中表示此对象?我更喜欢在响应对象中返回自定义数据对象。基于注释的框架的全部要点是从应用程序逻辑中抽象出http方面。应用程序开发人员不需要管理响应代码和实体,而是返回模型对象并抛出可以在映射器中映射到http代码的自定义异常。它的控制较少,但我认为快速开发api更容易 你能举两个例子吗?这样应该更容易理解。REST-API与您使用的某些框架的具体实现无关——特别是当您使用响应对象而不是POJO时。POJO将被封送到底层框架所理解的所需输出格式(Accept header),并返回默认响应代码(如果不是通过注释或异常(处理程序)指定的,则返回)。响应对象将指定返回代码和显式返回的实体-尽管编组也可以自动完成。@AlbertoZaccagni将添加一个示例。@RomanVottner因此,其优点和缺点基本上是关于显式处理响应代码等。我很好奇一般行业遵循的做法是什么。无论如何,这是一个很好的回答。你能不能把它作为一个帖子而不是评论,这样我就可以接受,如果在一天左右没有更好的答案?谢谢。在JAX-RS中,您使用f.e.
@Path(“/car”)
或@Path(“/car/{id}”)注释了方法,因此将调用相应的方法,该方法可能返回一个
响应.status(Response.status.OK).实体(…).build()`实例,其中,具体实体要么由您编组,要么在将POJO作为实体传递时由框架编组。我的意思是,如果您返回包含您的响应对象,那么响应数据将不会与rest服务的概念同步,rest服务的概念是在“/car”情况下的预期车列表,在“/car/{id}”情况下的预期车列表,但如果您使用请求/响应,将在2种情况下获得响应包装器。我同意您的看法。想知道什么是行业最佳实践。