REST路由-具有多个唯一参数的实体

时间:2019-05-11 15:04:09

标签: c# .net rest

我已经阅读了多个有关REST路由的最佳实践指南,但是没有一个指南可以回答如何使用具有唯一参数而不是ID的实体的方法。

因此,例如,我可以为实体USER提供 ID 代码(均为唯一)。

通过ID进行简单获取的方式如下:

/users/{id}

并通过代码获取

/users/{code}

但是如果 ID CODE 都是整数怎么办?

我可以使用查询字符串过滤器创建路由,例如:

/users?code=123

但是我想过滤路由应该返回用户列表,并且可能有多个参数导致返回用户列表。

/users?firstName=abcd

那么处理这样的实体的路由的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

请记住,REST并不关心您用于标识符的拼写约定。两个URI相同,在这种情况下,客户端将假定它们引用相同的资源,或者两个URI不同,在这种情况下客户端将假定它们引用不同的资源。

/users/{id}
/users/{code}

在这种情况下,当您获取的整数不明确时,听起来好像您的问题是试图区分要使用的资源。

由于整数是不明确的,因此您需要在URI的其他地方进行区分。只要标识符与RFC 3986一致,REST就不会特别在意您的操作。

/ebc8a29b-76a5-4f40-b37a-2d40eab9283d/{id}
/9193590d-fc47-4107-a160-e344b9cedb5c/{code}

就REST而言,这是一个非常令人满意的解决方案。

/usersById/{id}
/usersByCode/{code}

这也完全令人满意,也许更容易被人类食用。

/users/id={id}
/users/code={code}

另一个令人满意的例子;这样可以提供可读性和共享的/users路径段,如果要将相对引用嵌入到表示中,则可能会很方便。

Matrix parameters是一个常用术语,涵盖了在路径段中嵌入信息的多种不同方式。我们有合理的希望,如果您使用标准/第三方库来解析URI,那么将支持其中的某些或所有约定。

答案 1 :(得分:0)

如果Id和Code的值不同,则我更喜欢这种样式。 “ /用户/ {idOrCode}”。 我可以这样编写查询:where(x => x.Id == id || x.code == idOrCode)