Restful和return类型

时间:2018-02-06 00:06:49

标签: rest asp.net-web-api architecture

(为简单起见,名称与实物不同)

我们有一个带有Person表的SQL Server数据库。我们还有一个地址表,其中包含街道地址和ID。 person表具有PhysicalAddressId和WorkAddressId列以及普通Person数据。

现有Api,名为' People',它会带回Person对象列表。

现有的Person / {Id} api电话会带回特定的人。我被要求在该Person调用中添加地址和一些复杂的其他内容。与SELECT ... FROM Person Where ID =...

相比,获取数据的过程很复杂,大约需要50毫秒

返回的对象(对于两个api调用)是相同的。 (创刊号?)。因此,当您调用Person时,将填充“地址”字段。但是在调用People时,只会填充Person相关字段。即它是从SELECT .. FROM Person' likeable'查询,而单个' By Id'来自复杂的存储过程。

问题在于,当您使用api时,通过调用特定的Person,您将获得一个填充的填充模型。但是List版本的物理地址'节点

是正确的做法,为列表与单个人(人物'模型列表和单一' ComplexPerson'模型)设置不同的类型?或者有更好的方法来处理这个问题。

1 个答案:

答案 0 :(得分:3)

我认为你可以遵循其他原则并做这样的事情:

端点: 人/ {ID}

将返回:

Person{
    id:
    name:
    etc
    Address{
        id:
        name:
        etc
   }
}

然后,为了列表,你可以这样做

端点: 人

将返回:

People
[
Person{
    id:
    name:
    etc    
    Address{
        "href": "https://yourapi/address/{id}"
    }    
},  
Person{
    id:
    name:
    etc    
    Address{
        "href": "https://yourapi/address/{id}"
    }    
}]

因此,当您调用链接到另一个资源的资源时,通常可以执行两项操作。

1)用实际资源填充它 2)添加指向您可以访问其他资源的链接。

要对此进行扩展,您可以添加查询字符串参数以更改行为,并让用户决定是否会看到链接或填充的资源。

通常最好只在返回列表时返回链接,以减少服务器必须访问的资源量。