我正在为第三方产品构建Asp.Net Web API,并考虑将OData 4用于我的API。我的对象模型中有相当大的自由度,但无法更改基础数据模型。
我知道odata支持用于定义关系的导航属性,但它们似乎只是对象之间的直接链接。在数据模型的许多情况下,建立在关系上的我有自己的属性。例如,用户'有一个'会员的集合'与团体,组织单位等的关系,以及'会员链接本身有一个默认'布尔属性。在某些情况下,关系具有多个属性。
有没有最好的办法来解决这个问题?我是否需要成为'会员资格'具有属性的实体,并且具有导航属性的用户(用户>成员资格>组)有两个跃点?我应该做一个会员资格'复杂类型,创建会员资格'属于'会员资格'并在会员资格中拥有导航属性' (如果那可能)?为了方便起见,我还应该向所有组成员添加一个只读导航属性(用户>组)吗?
由于
答案 0 :(得分:0)
从REST角度(参见Richardson Maturity Model level 3),一旦导航到user
资源,客户端就可以发现group-query
关系(链接)。以下是HAL Browser等工具的外观:
"api:group-query": {
"href": "http://apiname:port/api/group?userId=1,pageNumber={pageNumber}&pageSize={pageSize}&sort={sort}"
},
这会将消费者带到用户所属的group
资源的(分页)集合中:
GET /api/user/1/groups
可以返回这样的内容:
{
"groups": [
{
"id": 123,
"name": "Test Group"
},
{
"id": 134,
"name": "Tennis squad"
}
]
}
如果您整合链接,我认为不需要membership
资源/实体。