当前位置: 首页 > 知识库问答 >
问题:

浏览器的CRUD URL设计(不是REST)

谢华彩
2023-03-14

所以我非常了解Restful URL设计。然而,对于不是单页应用程序(SPA)的传统网站,浏览器的URL设计如何。

出于本例的目的,让我们假设我们有一个Book数据库。让我们进一步假设我们创建了2个传统的HTML站点。

  1. 显示所有书籍的HTML表
  2. 用于显示一本书的HTML表单(空白或预先填充了书的详细信息)
GET /book/show/all        // HTML Table
GET /book/show/{id}       // HTML Form pre-filled
GET /book/new             // HTML Form blank
POST /book/new            // Submit HTML Form
POST /book/update/{id}    // Submit updated HTML Form
POST /book/delete/{id}    // A Link/Button with POST ability (no JS needed)

浏览器只能进行GET和POST操作,除非有人使用JavaScript。考虑到上面的URL设计,引入JavaScript并对更新和删除一个资源发出PUT和DELETE请求是不是更明智呢?还是我应该只使用GET and POST?

干杯

共有1个答案

国高杰
2023-03-14

而不是CRUD(创建-读取-更新-删除),我更喜欢首字母缩写(D)AREL(显示、添加、删除、编辑、列表)--(D)是静默的;-)

虽然并不是所有的RESTful API设计选择对基于浏览器的crud应用程序都有意义,但我们可以借用其中的许多内容,例如:

GET  /books                -- html table listing all books (alternatively /books/list to go with the DAREL acronym)
GET  /books/add            -- display a form for adding a new book
POST /books/add            -- adds a new book and redirects to /book/1 (where 1 is a new book id)

我个人更喜欢用复数名词表示集合,用单数名词表示项目,所以…

GET  /book/1               -- display book 1 info (e.g. a customer view)
GET  /book/1/edit          -- display a form to edit /book/1
POST /book/1/edit          -- updates /book/1 and redirects to /book/1
GET  /book/1/remove        -- maybe/probably optional
POST /book/1/remove        -- normally /book/1/edit will have a delete button that handles "are you sure..?" and posts here, redirects to /books
GET  /book/1/authors       -- list all authors for /book/1
GET  /book/1/authors/add   -- add author form
GET  /book/1/author/1
GET  /book/1/author/1/edit
// etc.
GET  /authors
GET  /authors/add
GET  /author/1
// etc.

同样,作者写的书:

GET  /author/1/books
// etc.

不过,大多数现代Web应用程序都使用ajax调用子资源,因此在这里也可以使用纯RESTful api:

GET    /api/book/1/authors     -- returns list of all authors for /book/1
POST   /api/book/1/authors     -- create a new author, returns the new author uri, e.g. /api/author/1
GET    /api/author/1           -- get /author/1 info according to MIME type etc.
PUT    /api/author/1           -- update /author/1
DELETE /api/author/1           -- delete the /author/1 resource
DELETE /api/book/1/author/1    -- delete author/1 from /book/1? (or maybe this is covered by PUT /api/author/1 ?)

从原始URL方案的翻译是相当机械的

/resource/unique-id/action -> http-verb /resource/unique-id
display = GET (on a singular resource)
add = POST
remove = DELETE
edit = PUT
list = GET (on a plural/collection resource)
 类似资料:
  • 可进行允许Cookie或安全性等浏览器设定。请在网页显示的状态下,轻触(选项)>[设定],遵循画面指示正确操作。

  • Bootstrap支持多种多样的现代浏览器以及设备,还支持一些较早的浏览器。具体支持哪一些,请看下面内容。下面还列出了一些已知的漏洞的详细信息。 支持的浏览器 Bootstrap 支持所有的主流浏览器和平台的最新的、稳定的版本。 在 Windows 中, **我们支持 Internet Explorer 9-11 **。下面提供了更多详细的支持信息。 移动设备 总的来说,Bootstrap支持所有

  • Burp 需要与您的浏览器一起使用。 Burp 作为 HTTP 代理服务器,所有来自浏览器的 HTTP/HTTPS 流量都通过 Burp。 要使用 Burp 进行任何类型的测试,您需要配置浏览器以使用它。 首先,您需要确认 Burp 的代理侦听器是正常工作的。 转到代理(Proxy)选项卡,然后选项(Options)子选项卡,并查看代理侦听器(Proxy Listeners)部分。 您应该在表中看

  • 每个桌面浏览器都有一套开发工具,开箱即用,您可以将他们添加到您的浏览器的扩展或插件。 以下是两个具有一些实用功能的Chrome扩展程序,可帮助您调试设计。 Emmet Re:View Emmet Re:View是一个工具,它可以让你轻松查看您的网站在每个媒体查询(media queries)中的样子,并同步所有页面的滚动。 你可以在他们的网站上看到它的演示。 Download on the Chr

  • 我正在尝试安装ActiveMQ浏览器,我想连接到我的ActiveMQ Artemis服务器。我们如何配置它?

  • 浏览器播放量统计 获取用户维度下按天统计的浏览器播放量,该接口提供一天或多天的数据查询,返回为汇总结果。 地址为: http://spark.bokecc.com/api/stats/playcount/user/daily/browser 需要传递以下参数: 参数 说明 userid 用户id,不可为空 start_date 查询开始日期(含),格式为yyyy-MM-dd,不可为空 end_da