哪个更好:返回Response对象或表示其余资源的Object?

时间:2015-07-08 13:05:11

标签: java rest

在某些书籍中,其余的API通常会返回一个Response对象,该对象包装了一些表示有效负载,状态等的其他对象。

另一方面,我见过和写过的许多API都将POJO(或称之为DTO)作为JSON返回给客户端。

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

我想知道是否有更好的做法。这将有助于我设计一些API并在我的团队面前展望。但是,如果这两个问题更好,我可以将这个问题关闭。是太多的意见。

感谢。

更新: 其余两个API看起来像这样。避免使用@ Path,@ Get,@ PathParam,@ Produces等代码

public Response myCustomerObject(int id){...} 

这将返回一个包含在Response对象中的Customer对象。响应也可能是错误。

以下方法将直接返回客户实体:

public Customer myCustomerObject(int id){...} 

3 个答案:

答案 0 :(得分:5)

我更喜欢在响应对象时返回自定义数据对象。基于注释的框架的重点是从应用程序逻辑中抽象出http方面。应用程序开发人员不是管理响应代码和实体,而是返回模型对象并抛出可以映射到映射器中的http代码的自定义异常。它的控制力较弱,但恕我直言,它更容易快速开发api。

答案 1 :(得分:3)

我会投票给一个给你一个Response对象的API。这使您可以在代码中完全控制响应,并且很清楚响应的内容。如果您想编写一个无法由POJO轻松表示的响应,则不必使用非直观的解决方法。

从休息处理程序方法中返回一个Object,然后将其转换为响应,这对我来说是太多框架魔法。

Worst - imho - 是从休息处理程序方法返回String的做法,然后将其解释为模板引用(例如,JSP资源的路径),然后将其写入响应。再一次太多魔术了。

答案 2 :(得分:0)

一个返回的响应对象包含您的数据正在获取SOAP和HTTP等请求/响应服务的遗产,但REST服务建立在资源概念而非请求/响应所以我更喜欢使用对象代表你的实际资源而没有包装,休息服务如何代表你的资源直接在ex的响应对象上。如果你打电话给汽车这样的资源:

http://localhost/car获取汽车列表

http://localhost/car/1获取ID为1的汽车

如何在响应对象中表示这个?