json - 在 RESTful Web 服务中,响应 DTO 是否应该包含它们的子 DTO?

标签 json web-services rest dto saas

考虑具有名称和多个位置 (/users/{id}/locations) 的用户 (/users/{id})。

当我请求一个用户 (/user/{id}) 时,该用户是否应该被完整地表示——它的 id、名称和位置——或者位置应该只在单独的请求中返回?例如,对于 id=123 (/users/123) 的用户请求,您希望使用哪个 JSON DTO:

1) { "id":123, "name":"Peter", "locations":[{"id":1, "name":"Chicago"}, {"id":2, "name":"纽约”}] }

2) { "id":123, "name":"Peter", "locations":[{"id":1}, {"id":2}] }

3) { "id":123, "name":"Peter", "locations":[1, 2] }

4) { "id":123, "name":"Peter"}

这是否更主观,在 DTO 的大小和典型用例中所需的请求之间进行推拉?我倾向于简单地包含所有相关数据 (1),但我不确定这是否比仅仅要求开发人员多次调用 API 以获取他们实际需要的所有数据更好。

最佳答案

要成为 RESTful,您不一定必须返回资源的完整表示
但是,您确实希望启用超媒体作为获取/设置 API 用户所需的所有信息的手段(超媒体作为应用程序状态的引擎 - 又名 HATEOAS)

为了满足这一点,您可以使用@bowmanb 的建议为所有位置放置一个 URI,或者为每个位置添加单独的 URI。您可能希望为其他选项添加额外的 URI,以便对资源执行某些操作。

Jim Webber、Savas Parastatidis 和 Ian Robinson 撰写了一篇关于 HATEOAS 的好文章,名为 "how to GET a cup of coffee"

关于json - 在 RESTful Web 服务中,响应 DTO 是否应该包含它们的子 DTO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10403540/

相关文章:

iphone - 如何检查我是否从 json 中得到 null?

javascript - Dymo JavaScript API 可以连接到托管在同一网络上不同机器上的 Dymo Web 服务吗?

xml - REST 服务是否应该为 XML 响应公开 XSD?

javascript - 如果 AJAX REST API 成功或失败,我如何访问成功或错误回调中的请求 header ?

java - Spring Data REST,如何处理列表中的@Version 属性

javascript - 如何从多维数组中过滤产品?

css - 如何将数据从json传递到css?

java - 使用 wsgen 时未找到类/名称错误

java - 如何使用 Web 服务和 MySQL 创建 Java 后端?

Javascript (node.js) 数组到特定的字符串格式(类似于 JSON)