Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 哪一个更好:返回响应对象还是表示rest资源的对象?_Java_Rest - Fatal编程技术网

Java 哪一个更好:返回响应对象还是表示rest资源的对象?

Java 哪一个更好:返回响应对象还是表示rest资源的对象?,java,rest,Java,Rest,在一些书籍中,restapi通常返回一个Response对象,该对象封装了一些表示有效负载、状态等的其他对象 另一方面,我所看到和编写的许多API都将POJO(或称之为DTO)作为JSON返回,这是客户端使用的API 这可能是基于意见的,但我想知道在高可伸缩性环境中使用这两种方法中的哪一种更好,在这种环境中,一些请求会导致成功,而另一些请求会导致失败/数据未返回 我想知道是否有公认的更好的做法。这将帮助我设计一些API,并在我的团队面前正确地看待问题。但是,如果“两者中最好的”是基于太多的观点,

在一些书籍中,restapi通常返回一个Response对象,该对象封装了一些表示有效负载、状态等的其他对象

另一方面,我所看到和编写的许多API都将POJO(或称之为DTO)作为JSON返回,这是客户端使用的API

这可能是基于意见的,但我想知道在高可伸缩性环境中使用这两种方法中的哪一种更好,在这种环境中,一些请求会导致成功,而另一些请求会导致失败/数据未返回

我想知道是否有公认的更好的做法。这将帮助我设计一些API,并在我的团队面前正确地看待问题。但是,如果“两者中最好的”是基于太多的观点,我同意这个问题被关闭

谢谢

更新: 这两个restapi如下所示。避免使用诸如@Path、@Get、@PathParam、@products等代码

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种情况下获得响应包装器。我同意您的看法。想知道什么是行业最佳实践。