当前位置:  开发笔记 > 前端 > 正文

如何在RESTful Web应用程序中映射不同的UI视图?

如何解决《如何在RESTfulWeb应用程序中映射不同的UI视图?》经验,为你挑选了1个好方法。

我正在设计一个Web应用程序,它将支持标准UI(通过浏览器访问)和RESTful API(基于XML/JSON的Web服务).用户代理将能够通过在AcceptHTTP标头中使用不同的值来区分它们.

RESTful API将使用以下URI结构("article"资源的示例):

GET /article/ - 获取文章列表

POST /article/ - 添加一篇新文章

PUT /article/{id} - 根据更新现有文章 {id}

DELETE /article/{id} - 删除基于的现有文章 {id}

但是,应用程序的UI部分需要支持多个视图,例如:

标准资源视图

提交新资源的视图

用于编辑现有资源的视图

删除现有资源的视图(即显示删除确认)

请注意,后三个视图仍然可以通过GET,即使它们是通过重载处理的POST.


可能的解决方案:
在URI中引入额外的参数(关键字)来识别各个视图 - 即,除此之外,应用程序将支持以下URI(但仅适用于Content-Type: text/html):

GET /article/add- 显示添加新文章的表单(通过GET,通过处理获取POST)

GET /article/123- 以"查看"模式显示文章123(通过提取GET)

GET /article/123/edit- 以"编辑"模式显示文章123(GET通过PUT重载获取,通过重载处理POST)

GET /article/123/delete- 显示第123条的"删除"确认(GET通过DELETE重载处理,通过重载处理POST)

更好的实现可能是将add/edit/delete关键字放入GET参数中 - 因为它们不会更改我们正在使用的资源,所以最好保持基URI同样适用于所有这些.


我的问题是:
考虑到每个资源可以有多个视图,您如何将上述URI结构映射到提供给普通用户的UI?您是否同意上述可能的解决方案,或者您是否会根据您的经验推荐不同的方法?

注意:我们已经实现了一个由独立的RESTful API和独立的Web应用程序组成的应用程序.我目前正在研究未来项目的选项,这两个项目将合并在一起(即为了减少开销).



1> Mike..:

在REST术语中 - "备用视图"实际上只是普通的旧资源,因为URI是不透明的.通过以下链接发现关系 - 在这种情况下; 从文章列表到文章,编辑和删除该文章.这里的关键是它实际上与你的URI结构无关,即以下同样是"正确的":

GET /article/123/edit
GET /article/123;edit

答案真的只是品味问题.如果它们由URI标识,并且因此可以链接到,那么您就是正确行事.

考虑到每个资源可以有多个视图,您如何将上述URI结构映射到提供给普通用户的UI?

即通过提供XML相同的超链接,以连接/上行链路的资源(视图)客户端跟踪和在必要时进行UI渲染 - 作为HTML应用程序的工作我会在完全相同的方式做到这一点.

例如

GET /article/foobar

200 OK
Content-Type: application/mytype+xml
....

....

最后:

您是否同意上述可能的解决方案,或者您是否会根据您的经验推荐不同的方法?

我认为你上面的方法是合理的 - 但是,你应该专注于链接关系而不是URI模式.

您可以选择保持"更大粒度",并避免为XML驱动的应用程序单独删除(甚至编辑)资源; 只是不在XML中链接它们而是选择在文章资源本身中包含删除/编辑链接和表单 - 这可以与HTML驱动版本的初始提议一起使用.

总的来说,为XML和HTML驱动的应用程序使用相同资源的方法是一个很好的方法.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有