1

我正在尝试遵循我的 api 路由的模式。

这些都是 GET 请求

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

观察。第三个是一个问题,因为路由的最后一部分将有类似 /user@domain.com 的内容,因此该路由没有被处理,因为它认为我正在尝试转到不同的域(例如: http://localhost/users/email/me@microsoft.com

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

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

IE:

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

我应该如何格式化 REST 端点以通过电子邮件地址获取用户?我确实想在“获取”用户时使用 GET。

谢谢 :-)

4

3 回答 3

0

C#-HTMLEncode 或 Javascript-转义您的参数。那应该有帮助。

于 2013-10-31T20:26:19.760 回答
0

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

例如

/users
/users/{userid}
/users/email?address=me@microsoft.com

就个人而言,我倾向于将用户视为“纯”资源,并/users/1通过参数区分获取用户的方式(除了它不变的、唯一的 ID via 等):

/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,这听起来很酷,直到有人想按位置调用它,然后按项目调用,然后按部门调用, ETC。

于 2013-10-31T20:38:05.380 回答
0

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

于 2013-10-31T20:56:28.297 回答