JSON响应模型设计问题

Dav*_*New 5 rest json web-services json.net asp.net-web-api

我需要帮助设计API的JSON响应模型.

假设一个getUsers调用返回以下响应模型:

{
    "users":
    [
        {
            "userId": "1",
            "name": "Joe Soap",
            "companyId": "3"
        },
        {
            "userId": "2",
            "name": "Bob Jones",
            "companyId": "3"
        },
        {
            "userId": "3",
            "name": "Mary Jane",
            "companyId": "4"
        },
    ]
}
Run Code Online (Sandbox Code Playgroud)

现在我们有另一个电话,让我们说getUsersWithCompany.这包括公司信息.我的问题是:

我应该将这些额外company数据包含在每个中,user还是应该是companies响应模型中的全新列表?

解决方案1:结合用户和公司

{
    "usersWithCompany":
    [
         {
            "userId": "1",
            "name": "Joe Soap",
            "company":
            {
                "companyId": "3",
                "companyName": "Some Company Ltd",
                "contactNumber": "123123123"
            },
        },
         {
            "userId": "2",
            "name": "Mary Jane",
            "company":
            {
                "companyId": "4",
                "companyName": "Another Company Ltd",
                "contactNumber": "463463383"
            },
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

优点:当模型被消耗时,这可能会更容易,因为在遍历用户列表时公司数据可用.

解决方案2:为用户和公司分开列表

{
    "users":
    [
        {
            "userId": "1",
            "name": "Joe Soap",
            "companyId": "3"
        },
        {
            "userId": "2",
            "name": "Bob Jones",
            "companyId": "3"
        },
        {
            "userId": "3",
            "name": "Mary Jane",
            "companyId": "4"
        },
    ],
    "companies":
    [
        {
            "companyId": "3",
            "companyName": "Some Company Ltd",
            "contactNumber": "123123123"
        },
        {
            "companyId": "4",
            "companyName": "Another Company Ltd",
            "contactNumber": "463463383"
        },
    ],
}
Run Code Online (Sandbox Code Playgroud)

优点:这可确保用户和公司项目在呼叫期间始终保持一致.消费者的品种较少.

我们正在使用.NET Web Api 2.

for*_*rat 1

设计应考虑实体是弱还是强。(弱意味着如果主要实体被删除,它们就不会生存)。因此,对于用户和公司来说,我有一个单独的 RESTFULL 服务,例如

/users
[
        {
            "userId": "1",
            "name": "Joe Soap",
            "companyId": "3"
        },
        {
            "userId": "2",
            "name": "Bob Jones",
            "companyId": "3"
        },
        {
            "userId": "3",
            "name": "Mary Jane",
            "companyId": "4"
        },
]

/companies
[
        {
            "companyId": "3",
            "companyName": "Some Company Ltd",
            "contactNumber": "123123123"
        },
        {
            "companyId": "4",
            "companyName": "Another Company Ltd",
            "contactNumber": "463463383"
        },
]
Run Code Online (Sandbox Code Playgroud)

您还需要考虑除了用户之外是否还有其他对公司目录的参考。如果是这样的话,我什至会相信这个方法。