REST: post与posts的区别,以及new与create的区别

5
当你为应用程序设计URL模式时,你会使用哪些规则?
  • 对于帖子列表,使用example.com/post/example.com/posts/
  • 对于新帖子,使用example.com/post/new/example.com/post/create/
  • 对于帖子的列表和详情,使用example.com/posts/ + example.com/post/23/example.com/post/ + example.com/post/23/
  • 对于详情,使用example.com/post/23example.com/post/23/
  • 对于编辑,使用example.com/post/edit/23/example.com/post/23/edit/
我更喜欢使用/post/来表示列表,/post/23/来表示详情,/post/23/edit/来表示编辑,因为我可以在浏览器地址栏中轻松地手动操作这些URL。我的想法正确吗?请给我建议。
谢谢。
2个回答

4
当创建新资源时,您应该使用HTTP POST方法。因此,对于一个新客户,您可能会POST到example.com/customer。然后,如果您想获得有关该客户的信息,请GET到example.com/customer/{您最近创建的客户ID}。如果您想获取所有客户,请GET到example.com/customer。如果您想编辑客户,则可能需要将PUT发送到example.com/customer/{您的客户ID}。
似乎您的基本问题是您在URL中指定了操作(或动词)。您不需要这样做。而不是像example.com/edit/23这样做,您应该使用HTTP PUT方法,并使用example.com/23(或example.com/customers/23)。
请查看什么是RESTful / REST以了解如何创建RESTful资源的评论。
请查看REST中的PUT vs POST以了解POST和PUT(编辑和创建)之间的区别。

对于构建更复杂的RESTful URL,我通常参考来自LinkedIn技术人员的this presentation


好的,谢谢。我的问题并不完全是关于如何使用POST、PUT等。我只是想澄清人们如何设计有用的URL模式(糟糕的英语无法在问题中解释这一点)。 但是你回答中的演示链接对我非常有帮助! - Zada Zorg
@Zada:我在原帖中添加了一些内容。似乎你正在处理的根本问题是,你不需要在 URL 中使用 create 或 edit 等词语。你可以通过使用不同的 HTTP 方法来实现这一点。 - labratmatt
如果在你的URI中出现了动词,那么你可能不是在遵循RESTful的规范。 - nategood

0

我使用:

  • GET /posts 获取列表
  • GET /posts/new 仅适用于“静态”网站,用于获取空的HTML表单(“ajax”网站和“独立”客户端不需要它)
  • POST /posts 创建(前一个表单中的“action”属性)
  • GET /posts/23 获取详细信息(不用于编辑!)
  • GET /posts/23/edit 获取填充了隐藏的“_method = PUT”字段的HTML表单,以在浏览器中模拟PUT
  • PUT /posts/23 编辑(前一个表单中的“action”属性)
  • DELETE /posts/23 删除(带有“_method = DELETE”的“内联”HTML表单以进行模拟)
  • POST /posts/23 以在浏览器中模拟PUT和DELETE

我从不使用/posts/或/posts/23/,因为这会使更改响应格式变得困难(或脏)。我可以使用/posts(与/posts.html同义)用于浏览器,/posts.xml用于XML服务,/posts.json用于“ajax”数据,/posts.smth_else用于其他用途 :) 在未来。此外,它们所有都可以是静态文件(缓存或归档),以释放高负载下的CPU和内存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接