DTO应该代表嵌套的实体结构,还是我应该将路径设置为每个嵌套对象都有一个端点?

时间:2019-10-01 18:22:37

标签: rest http design-patterns api-design dto

例如,假设我有一个看起来像这样的实体。

public class PersonEntity {
    public String firstName;
    public String lastName;
    public List<CarEntity> cars;
}

选项1
GET / people / 1

{
    "firstName": "Bob",
    "lastName": "Sagget,
    "cars": [
        (could be just IDs or the full Car DTOs)
    ]
}

选项2
GET / people / 1

{
    "firstName": "Bob",
    "lastName": "Sagget"
}

获取/ people / 1 /汽车

[
    {
        "make": "Honda",
        "model": "Accord",
        "year": 1992
    }
]

我觉得选项2更RESTful。但是我也想知道在每种情况下都需要完整的嵌套对象集的实例。在那种情况下,我还是应该这样设计吗?此外,如果Car实体具有嵌套对象怎么办?我需要第三个端点向下导航到cars子实体。

1 个答案:

答案 0 :(得分:0)

如果将整个void dto放在void中,您将可以在同一页面上显示一个人和该人拥有的所有汽车,我认为这是一个更加用户友好的设计。

如果您为template <template <class...> class Check, typename Enable, typename... Types> struct require_variadic_impl : std::false_type {}; template <template <class...> class Check, typename... Types> struct require_variadic_impl<Check, void_t<Check<Types...>>, Types...> : std::true_type {}; template <template <class...> class Check, typename... Types> struct require_variadic_tester : require_variadic_impl<Check, void, Types...> {}; cars做一个单独的端点,那么用户将首先导航到people页面,然后用户必须再次单击才能看到此{ {1}} person's甚至可能需要加载其他页面