当我使用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不提供代表状态机的网址设计?你看到我很困惑客户的责任开始或服务器结束......
答案 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