2015-09-27 147 views
0

我的SPA有一个设计问题,希望有人能给我一些指导。用户个人资料页面呈现如下:如何在SPA中将自定义URL映射到REST资源?

  1. 浏览器提取/some-username

  2. 服务器检查以查看是否该请求是一个XMLHttpRequest与否。它不是,所以它只是返回捆绑的JavaScript应用程序到浏览器执行。

  3. javascript包在浏览器中执行,它看到当前的URL并发出AJAX请求,再次到/some-username

  4. 服务器查看XMLHTTPRequest标头,查找具有自定义URL“/ some-username”的用户,并将有关用户的JSON数据返回给呈现的javascript。

这感觉不对。应用程序应将RESTful请求发送到/users/:id以获取用户数据。但是,它怎么能知道URL为/some-username的用户对应的id?

这是值得添加额外的HTTP请求,只是为了查找资源标识符?类似于/get_user_id?url=/some-username

+0

请求应该转到'/ users /:id'上有什么特别的原因吗? – zeroflagL

+0

我正在尝试设计一个RESTful API。从自定义URL获取资源不是正确的方法。 – 1in7billion

+1

@ 1in7billion我们正在讨论2个不同的URL,这里描述了SPA REST客户端的状态,另一个标识了REST资源。如果你没有看到,那么你显然没有设计任何“RESTful”所需的技能。反正你可能不需要它,因为你的应用程序不会有第三方客户端,所以没关系。 – inf3rno

回答

1

您灵活关于你的API?如果是这样,您可以将/some-username更改为/user-id,或者如果您想包含用户名/user-id/username但忽略用户名。

作为备选方案,也常见于使在过滤器形式的请求。像/users?username=peter

如果您的用户名标识用户随意使用/users/peter。因为它是真实的ID(不一定是整数),然后你的网址是/users/:id

+0

网址必须保持自定义。例如,像Twitter一样。 你的第二点很有趣。该应用程序可以通过'/ users?url =/some-username'获取用户资源。 – 1in7billion

+0

为什么你想提及url而不是用户名? – sbeliakov

+0

JavaScript不知道用户名。它加载,初始化,并且路由器看到当前URL是'/ some-username'。它还没有关于用户的数据。我应该提到用户也可以更改他们自己的自定义URL,所以我们不能假定他们的用户名==='some-username'。 – 1in7billion

1

关于/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> 

我建议维持目前的做法。

+0

我会试试这个,谢谢。 – 1in7billion

相关问题