REST API - GetUserByEmail获取路由的最佳方法

时间:2013-10-31 20:21:29

标签: c# rest

我正在尝试使用我的api路线模式。

这些都是GET请求

/users                         -- get all users
/users/{userId}                -- get user by id
/users/email/{email}           -- get user by email

OBV。第三个问题是一个问题,因为路由的最后一部分会有/ user@domain.com,因此路由不会被处理,因为它认为我正在尝试去另一个域(例如:http://localhost/users/email/me@microsoft.com

我知道我可以通过POST来完成这项工作,我知道我可以使用/ users / {email} / gedderdone等其他组合来完成这项工作

...但我正在尝试遵循一致的所有资源模式。

即:

/people/{id}
/people/name/{name}
/people/ssn/{ssn}

如何格式化REST端点以通过电子邮件地址获取用户?我确实想要使用GET,因为我正在“获得”用户。

谢谢:-)

3 个答案:

答案 0 :(得分:0)

C#-HTMLEncode或Javascript-escape您的参数。这应该会有所帮助。

答案 1 :(得分:0)

不要害怕在您的请求中使用参数

e.g

/users
/users/{userid}
/users/email?address=me@microsoft.com
个人而言,我倾向于将用户视为“纯粹”资源,并通过参数来区分获取用户的方式(除了通过/users/1获取不变的唯一ID等)
/users/?by=email&value=me@microsoft.com
/users/?by=ssn&value=123345
/users/?by=shoesize&value=10

REST中没有任何内容表明您必须纯粹通过路由值来识别资源;如果您坚持使用纯路由值模式,并且发现需要通过多个字段检索用户,那么您最终将需要编写像users/department/development/project/14567/location/dublin这样的疯狂路由,这听起来很酷,直到有人想按位置调用它然后通过项目,然后是部门等。

答案 2 :(得分:0)

根据RFC3986,“@”符号是保留的符号。因此,您必须将百分比编码传递为%40 - 其他任何内容都无效。