2014-01-13 116 views
1

当我使用asp.net web API设计一个restful API时,我必须记住我的客户端处理代表状态机的url设计吗?客户端UI路由与服务器端路由有何区别

为了更清楚地说明我也在谈论URL中的遏制关系。

例如:

我有一个可以有很多Schooylear实体用户实体。 我有一个Schooylear实体,它可以有多个期间实体。

这会导致三个Web API控制器。 UserController,SchoolyearController,PeriodController。现在我问我自己,我应该像暴露途径:

api/users/1/schoolyears/2013-2014/periods/2014-01-01 

的问题是,现在我应该如何映射的HTTP路线???

像上面一个

其实我也从来没有见过类似的路线,而路线:

api/users/1 
api/schoolyears/2013-2014 
api/periods/2014-01-01 

但与关系包含上述路线将是非常有益的在地址栏,用户如果看到...

应该是一个安静的API不提供代表状态机的url设计?你看我很困惑客户端的责任开始或服务器端...

回答

0

当你使用像angularjs这样的框架优化一个有状态的JavaScript客户端,那么你的组合/嵌套视图将决定你的url的构造单曲。你不必在服务器上做任何特殊的事情。只要保持你的路线:

api/users/1 
api/schoolyears/2013-2014 
api/periods/2014-01-01 

如你所愿。这些路由与客户端状态无关,这些路由不会将客户端请求转发更多。

在客户端设置好路线与占位符这是customerId`s

orderId`s。当您现在更改组合框中的客户时,您可以使用新选定的customerId更新您的路线,然后导航到该路线以获取相应的订单。

你在客户端做的仅仅是改变了URL,而不重定向:

jquery: change the URL address without redirecting?

你只创建一个像#/客户的哈希后 “URL”/ 1 /命令/ 2

如果你不喜欢的hashbang你也可以去HTML5按压状态:

http://badassjs.com/post/840846392/location-hash-is-dead-long-live-html5-pushstate

0

一个RE STful系统不关心你的URI是什么样的。Web框架关心你的URI结构。想要使用你的URI作为“UI”的一部分是一个有效的关注。
具有多个路径参数的更长的URI并不是Web API v1中最简单的事情。通过属性路由,它应该更容易。

您需要谨慎的唯一事情就是生成层次结构,其中相同的概念资源出现在层次结构中的多个位置。这对于缓存并不是一个好主意。

你不希望在你的情况,

api/users/1/schoolyears/2013-2014/periods/2014-01-01 

而且

api/users/1/periods/2014-01-01 
+0

“你不希望在情况下,你有,... “是的,我想成为这种情况!当我正确理解msfanboy时,我需要mysite.com/#/users/1/schoolyears/2013-2014/periods/2014-01-01这对服务器路由没有影响,因为hashbang是客户端路由。再次,我需要这样的网址,用户如何能够将链接加入书签并再次快速加载?该链接需要整个信息链,否则无法装载2014年1月1日的期间。 – Elisabeth

+0

@Elisa我的假设(也许这是不正确的)是这两个URL都会返回完全相同的表示。如果是这样,你不想有两个返回相同表示的URI。你可以让一个URI返回一个重定向到另一个。这将允许这两个URI并不会中断缓存。 –

+0

@Elisa我还没有弄清楚URI片段的相关性与你的问题。 –

相关问题