RESTFul 中PUT POST PATCH的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RESTFul 中PUT POST PATCH的区别相关的知识,希望对你有一定的参考价值。

参考技术A PUT:用来创建一个URL已知的资源,或对已知资源进行完全替换。一般用来更新一个已知资源,除非在创建前,自己完全知道要创建的对象的URL。

POST:用来创建一个子资源,不是幂等的,多次执行,将导致多条形同的资源被创建。

PATCH:是对PUT方法的补充,用来对已知资源进行局部更新。

重定向 PATCH 和 PUT 路由轨道 5 以使用 POST

【中文标题】重定向 PATCH 和 PUT 路由轨道 5 以使用 POST【英文标题】:Redirect PATCH and PUT route rails 5 to use POST 【发布时间】:2021-07-21 16:30:44 【问题描述】:

我目前正在将正确的路由添加到旧版 Rails 应用程序中,我似乎无法使用 PATCH、PUT 和 DELETE 路由,因为应用程序目前的工作方式仅基于 GET 和 POST 路由。

所以我已经实现了 REST 路由,但目前,我需要重定向 PATCH、PUT 和 DELETE,直到我们可以更改它以使用正确的路由。

这是我在更新时得到的:

这些是自定义字段的路由# custom_fields

resources :custom_fields, except: %i[show destroy] do
  get :disable, on: :member
  
  collection do
    get :list
    get :edit
    get :disable
    get :enable
    get :order_fields
    post :process_order_fields
  end
end
# remap wrong implmentation of paths
get '/custom_fields/edit/:id', to: redirect('/custom_fields/%id/edit')

我尝试了以下方法

post '/custom_fields/:id', to: redirect(custom_field_path(id: %id))

但没有骰子。

【问题讨论】:

【参考方案1】:

我不明白你的问题。为什么“需要”添加这些重定向?

如果您希望定义像 post '/custom_fields/:id' 这样的旧版 POST 路由,但在内部让它执行与非旧版 PUT/PATCH 请求相同的操作,那么只需将其定义为:

resources :custom_fields, except: %i[show destroy] do
  post :update, on: :member
  # ...
end

此外,将其定义为您尝试的重定向是无效,according to the HTTP specification:

如果收到 302 状态代码以响应 GET 或 HEAD 以外的请求,用户代理不得自动重定向请求,除非用户可以确认,因为这可能会改变请求被执行的条件发布。

【讨论】:

嗯,好的,谢谢,关于我进行重定向的方式,这是遵循 rails docs edgeguides.rubyonrails.org/routing.html#redirection 根据 HTTP 规范,GET --> GET 重定向完全正常/正常,您的方法对于该用例来说是可以的。

以上是关于RESTFul 中PUT POST PATCH的区别的主要内容,如果未能解决你的问题,请参考以下文章

Django REST framework框架之GET, POST, PUT, PATCH, DELETE等API请求接口设计

如何设计一个多条件查询的restfulAPI

RESTful

PUT、POST 和 PATCH 有啥区别?

云原生(08):RESTful API中的HTTP方法和状态码总结

post、get、put、patch、Delete的区别