如何在SPA中将自定义URL映射到REST资源?
我的SPA有一个设计问题,希望有人能给我一些指导。用户个人资料页面呈现如下:如何在SPA中将自定义URL映射到REST资源?
浏览器提取
/some-username
。服务器检查以查看是否该请求是一个XMLHttpRequest与否。它不是,所以它只是返回捆绑的JavaScript应用程序到浏览器执行。
javascript包在浏览器中执行,它看到当前的URL并发出AJAX请求,再次到
/some-username
。服务器查看XMLHTTPRequest标头,查找具有自定义URL“/ some-username”的用户,并将有关用户的JSON数据返回给呈现的javascript。
这感觉不对。应用程序应将RESTful请求发送到/users/:id
以获取用户数据。但是,它怎么能知道URL为/some-username
的用户对应的id?
这是值得添加额外的HTTP请求,只是为了查找资源标识符?类似于/get_user_id?url=/some-username
。
您灵活关于你的API?如果是这样,您可以将/some-username
更改为/user-id
,或者如果您想包含用户名/user-id/username
但忽略用户名。
作为备选方案,也常见于使在过滤器形式的请求。像/users?username=peter
如果您的用户名标识用户随意使用/users/peter
。因为它是真实的ID(不一定是整数),然后你的网址是/users/:id
网址必须保持自定义。例如,像Twitter一样。 你的第二点很有趣。该应用程序可以通过'/ users?url =/some-username'获取用户资源。 – 1in7billion
为什么你想提及url而不是用户名? – sbeliakov
JavaScript不知道用户名。它加载,初始化,并且路由器看到当前URL是'/ some-username'。它还没有关于用户的数据。我应该提到用户也可以更改他们自己的自定义URL,所以我们不能假定他们的用户名==='some-username'。 – 1in7billion
关于/some-username
没有什么“不可靠的”。这只是另一种资源。反应 - 我希望 - 无论如何都包含规范URL /user/id
,无论是作为标题还是某种“自我”链接。
这也是你怎么能实现自己的目标。嵌入到页面的URL或者如JavaScript或作为头当量(不幸的是你不能读取使用JavaScript页面请求的报头):
//header. Can also use a custom header like X-User-Location
<meta http-eqiv="Location" content="/user/id">
//JavaScript
<script>
var userURL = '/user/id
</script>
我建议维持目前的做法。
我会试试这个,谢谢。 – 1in7billion
请求应该转到'/ users /:id'上有什么特别的原因吗? – zeroflagL
我正在尝试设计一个RESTful API。从自定义URL获取资源不是正确的方法。 – 1in7billion
@ 1in7billion我们正在讨论2个不同的URL,这里描述了SPA REST客户端的状态,另一个标识了REST资源。如果你没有看到,那么你显然没有设计任何“RESTful”所需的技能。反正你可能不需要它,因为你的应用程序不会有第三方客户端,所以没关系。 – inf3rno