Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为网页设计RESTful URL_Rest_Web Applications_Django Urls - Fatal编程技术网

为网页设计RESTful URL

为网页设计RESTful URL,rest,web-applications,django-urls,Rest,Web Applications,Django Urls,大多数REST教程对资源的安排如下: GET /car/ -> list of cars GET /car/<id>/ -> info about specific car POST /car/ -> create a new car GET/car/->车辆列表 获取关于特定车辆的/car/->信息 POST/car/->创建一辆新车 但是,在构建浏览器中使用的web应用程序时,缺少一个很少讨论的链接,在您发布到/car/之前,您需要获

大多数REST教程对资源的安排如下:

GET  /car/      -> list of cars
GET  /car/<id>/ -> info about specific car
POST /car/      -> create a new car
GET/car/->车辆列表
获取关于特定车辆的/car/->信息
POST/car/->创建一辆新车
但是,在构建浏览器中使用的web应用程序时,缺少一个很少讨论的链接,在您发布到/car/之前,您需要获取一个用于创建新资源(car)的表单。此表单的URL应该是什么

我通常使用:

 GET  /car/new/ -> form for creating a new car
 POST /car/new/ -> redirect to /car/<id>/ if item is created else show form with invalid fields highlighted
GET/car/new/->用于创建新车的表单
POST/car/new/->重定向到/car//如果创建了项,则显示突出显示无效字段的表单
但根据这不是一个好的RESTURL。我可以理解为什么它不是一个好的休息,因为“new”实际上是一个动词,而不是一个资源,但是表单应该在哪里,因为
GET/car/
已经用于列出汽车,所以你不能使用
GET/car/
作为新车的表单

简而言之,我的问题是:“什么是‘创建资源表单’的RESTful URL?”


稍微相关的一点是,即使在web服务中,依赖客户机预先知道模式有时也并不总是明智的,因此,即使在web服务中,客户机也可能需要一种方法来请求资源的当前模式。AFAICS,这与需要获取创建表单的情况类似(即表单有点像一个模式,它描述了如何构造用于创建资源的POST查询)。我在这里的思路正确吗?

我一直认为“表单”本身不是一种资源,所以
//新的
是可以的-表单不是API的常用元素。幻灯片的作者把它放在了一个“糟糕”的列表上,但没有提供一个正确的列表——我想他是如此的安静以至于忘记了考虑这种情况。

REST并不太在意URI的外观,只要它标识一个唯一的资源并且是自描述的。满足这些标准,除此之外,这是个人偏好。如果在URI中使用动词是合理的,则没有任何东西禁止使用动词

关于您的稍微相关的注释,您对作为模式的表单的提示是媒体类型。RESTful体系结构涉及客户机和服务器,两者都理解用于表示应用程序状态的媒体类型

RESTAPI应该将其几乎所有的描述工作都花在 定义用于表示资源和驱动的媒体类型 应用程序状态,或在定义扩展关系名称和/或 为现有标准媒体类型启用超文本标记。任何 努力描述在感兴趣的URI上使用什么方法 应完全在处理规则的范围内定义 对于媒体类型(在大多数情况下,已由现有 媒体类型)

请在此处阅读更多信息:


这是罗伊·菲尔丁写的,他定义了休息。一般来说,您的媒体类型应该是可扩展的——也就是说,任何更改都应该添加到旧客户机上,除非必要,否则不会中断旧客户机

问题是,
///new///code>意味着
///new///code>是一个子资源
///code>,而事实并非如此,因为
///new///code>实际上是对
///code>的一个操作,我同意,但是-你提供了为什么它不好的答案(我已经知道了),而不是正确的答案或其他命题。你能给我们一些新的想法吗?我想我想要的是一个例子,说明其他人是如何在RESTful URL中解决这个问题的(获取创建表单的需要)。我使用的另一种方法是将创建表单放在/car/页面上(这将是非常安静的),但是从可用性的角度来看,如果/car/页面已经非常拥挤,那么这并不总是合适的。如果您定义了
/cars/:id
,并尝试将表单放在类似
/cars/new
的位置,你不能拥有一辆id为“new”的汽车——这是一种需要小心的东西。也许你可以做一些类似于
/forms/addnewcar
的事情。这还不够!从字面上看,任何地方都没有提到这个缺失的环节,遗憾的是,也没有令人满意的答案。