Rest 客户端UI路由与服务器端路由有何不同

Rest 客户端UI路由与服务器端路由有何不同,rest,asp.net-web-api,restful-url,Rest,Asp.net Web Api,Restful Url,当我使用asp.net web API设计restful API时,我是否必须记住客户端处理表示状态机的url设计 为了更清楚,我还讨论了URL中的包含关系 例如: 我有一个用户实体,它可以有许多Schooylear实体。 我有一个Schooylear实体,它可以有许多周期实体 这将产生三个web API控制器用户控制器、学年控制器、周期控制器。现在我问自己,我是否应该公开以下路线: api/users/1/schoolyears/2013-2014/periods/2014-01-01 ap

当我使用asp.net web API设计restful API时,我是否必须记住客户端处理表示状态机的url设计

为了更清楚,我还讨论了URL中的包含关系

例如:

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

这将产生三个web API控制器用户控制器、学年控制器、周期控制器。现在我问自己,我是否应该公开以下路线:

api/users/1/schoolyears/2013-2014/periods/2014-01-01
api/users/1
api/schoolyears/2013-2014
api/periods/2014-01-01
现在的问题是,我应该如何映射http路由

事实上,我从未见过像上面这样的路线,而是像:

api/users/1/schoolyears/2013-2014/periods/2014-01-01
api/users/1
api/schoolyears/2013-2014
api/periods/2014-01-01
但是,如果在url栏中可以看到上述包含关系的路由,那么它将对用户非常有用


restful API是否应该不提供表示状态机的url设计?你看,我对客户端的责任从哪里开始或服务器的责任从哪里结束感到困惑…

当你使用像angularjs这样的框架优化一个有状态的javascript客户端时,你的组合/嵌套视图将指示url的构造。您不必在服务器上执行任何特殊操作。只要保持你的路线:

api/users/1
api/schoolyears/2013-2014
api/periods/2014-01-01
随你的便。这些路由与客户机状态无关。这些路由只转发客户机请求

在客户端,您使用customerId的占位符设置路由

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

您在客户端所做的只是在不重定向的情况下更改url:

您只需在散列之后创建一个“url”,如#/customers/1/orders/2

如果您不喜欢hashbang,也可以选择html5推送状态:


RESTful系统不关心URI的外观。Web框架关心您的URI结构。想要将您的URI用作“UI”的一部分是一个值得关注的问题。
在WebAPIv1中,使用具有多个路径参数的较长URI并不是最容易做到的事情。使用属性路由应该更容易

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


你不想处于这样的境地

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


“你不想处于这样的境地,…”是的,我想处于那样的境地!当我正确理解msfanboy时,我需要mysite.com/#/users/1/schoolyears/2013-2014/periods/2014-01-01,这对服务器路由没有影响,因为hashbang是客户端路由。同样,我需要这样一个url,否则用户如何才能将链接添加到书签并快速加载?链接需要整个信息链,否则无法加载2014年1月1日的期间。@我的假设(可能是错误的)是,这两个URL将返回完全相同的表示形式。如果是这样,您不希望有两个URI返回相同的表示。您可以让一个URI向另一个URI返回重定向。这将同时允许URI,并且不会破坏缓存。@Elisa我还没有弄清楚URI片段与您的问题的相关性。见鬼,“@Darrel”为什么不起作用?无论如何我们都错了。你先。。。你的假设是错误的,我会使用这两个网址。我最后。。。我还没有真正看到“和”连接。。。从我现在知道的是,我不必接触服务器路由,而是客户端UI路由。我还认为,由于我的困惑,问题的标题是误导性的,我现在将重新措辞。@Elisa“at”Darrel将不起作用,因为它是对我答案的评论,因此无论如何都会通知我。