大多数REST教程都按以下方式安排资源:
GET /car/ -> list of cars
GET /car/<id>/ -> info about specific car
POST /car/ -> create a new car
但是在构建用于浏览器的Web应用程序时,缺少很少讨论的链接,在POST到/ 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
但根据http://www.slideshare.net/Wombert/phpjp-urls-rest,这不是一个好的REST URL。我可以看出为什么它不是一个好的REST,因为“new”实际上被用作动词而不是资源,但是那时表格应该在哪里,因为GET /car/
已经用于列出汽车,所以你可以' t使用GET /car/
作为新车的表格。
简而言之,我的问题是:“'创建资源表单'的RESTful URL是什么?”
在一个略微相关的说明中,即使在Web服务中,有时也不总是明智地依赖客户提前了解架构,因此即使在Web服务中也可能需要客户端请求的方式资源的当前架构。 AFAICS,这是需要获取创建表单的类似情况(即表单有点像描述如何构造用于创建资源的POST查询的模式)。我的思路在这里是否正确?
答案 0 :(得分:2)
我一直认为“form”本身不是资源,所以/<name>/new
是可以的 - 表单不是API的常用元素。幻灯片的作者将其列入“坏”列表,但没有提供正确的列表 - 我认为他是如此RESTful以至于他忘了考虑这些案例。
答案 1 :(得分:2)
REST并不关心URI的外观,只要它识别一个唯一的资源并且是自我描述的。符合这些标准,除此之外,这是个人偏好。如果使用动词有意义,则禁止在URI中使用动词。
关于您的略微相关说明,您对表单作为架构的提示是媒体类型。 RESTful架构涉及客户端和服务器都理解用于表示应用程序状态的媒体类型。
REST API应该花费几乎所有的描述性工作 定义用于表示资源和驾驶的媒体类型 应用程序状态,或定义扩展关系名称和/或 支持超文本的标记,用于现有标准媒体类型。任何 花费在描述哪些方法用于感兴趣的URI上的努力 应该在处理规则的范围内完全定义 对于媒体类型(在大多数情况下,已经由现有类型定义) 媒体类型)。
在此处阅读更多内容:http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
这是来自定义REST的人Roy Fielding。通常,您的媒体类型应该是可扩展的 - 也就是说,除非必要,否则应添加任何更改,而不是破坏旧版客户端。