客户端UI路由与服务器端路由的差异有多大

时间:2014-01-13 13:13:56

标签: rest asp.net-web-api restful-url

当我使用asp.net web API设计一个安静的API时,我是否必须记住我的客户端处理代表状态机的url设计?

为了说得更清楚,我也在谈论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不提供代表状态机的网址设计?你看到我很困惑客户的责任开始或服务器结束......

2 个答案:

答案 0 :(得分:0)

当您使用angularjs等框架优化有状态的javascript客户端时,您的组合/嵌套视图将决定您的网址的构造。您无需在服务器上执行任何特殊操作。保持路由:

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

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

在客户端,您使用占位符设置路径,这些占位符是customerId`s

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

您在客户端执行的操作只是更改网址而不重定向:

jquery: change the URL address without redirecting?

您只需在#/ customers / 1 / orders / 2

之后创建一个“url”

如果你不喜欢hashbang,你也可以去html5推送状态:

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

答案 1 :(得分:0)

RESTful系统不关心你的URI是什么样的。 Web框架关心您的URI结构。想要将您的URI用作“UI”是一个有效的问题 在Web API v1中,使用具有多个路径参数的较长URI并不是最简单的事情。使用属性路由,它应该更容易。

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

你不想处于你所拥有的状况,

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

并且

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