active-model-serializers - 使用 active_model_serializer gem 和 Rails API 和 will_paginate/kaminari 时如何发送 206 状态码
问题描述
我正在使用 AMS、Rails 5.2.2 API 和will_paginate
gem。它根据需要工作,但响应代码200
不是206
#adsresses_controller
def index
@addresses = Address.all.paginate(page: params[:page], per_page: 25)
json_response(@addresses, :ok, include: ['shop', 'shop.country'])
end
wherejson_response
只是在中定义的一个方法controllers/concerns/response.rb
:
module Response
extend ActiveSupport::Concern
def json_response(object, status = :ok, opts = {})
response = {json: object, status: status}.merge(opts)
render response
end
...
end
问题是发送正确响应的最佳规则是什么 - 200 或 206 在分页响应的情况下?
谢谢你。
解决方案
https://guides.rubyonrails.org/layouts_and_rendering.html
2.2.12.4 :status 选项 Rails 将自动生成带有正确 HTTP 状态代码的响应(在大多数情况下,这是 200 OK)。你可以使用 :status 选项来改变它:
render status: 500
render status: :forbidden
您的响应代码是
200
因为你用:ok
.
您应该使用以下方法解决此问题:
json_response(@addresses, 206, include: ['shop', 'shop.country'])
或者
json_response(@addresses, :partial_content, include: ['shop', 'shop.country'])
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/206
HTTP 206 Partial Content 成功状态响应代码表示请求已成功,并且正文包含请求的数据范围,如请求的 Range 标头中所述。
因此,我认为主要取决于您的应用程序。
推荐阅读
- riscv - 我怎样才能找到一些关于火箭芯片的手册?
- reactjs - 更改页面时如何更新图像?
- css - 为什么 flex 内容会影响 Chrome 和 IE 中 flex 之外不相关元素的定位?
- php - 在 Laravel 5.8 中对用户列表进行排序
- ios - 应用程序 ID 和读/写文件
- android - 使用 xamarin 和 Visual Studio 时如何优化每个 ABI 的 apk?
- html5-canvas - 有什么方法可以让用户在 google colab 中绘制图像并获取结果图像数据?
- php - 如何获得有限的数据进行分页
- android - 无法恢复我的 android c++ 游戏的状态(state->savedState 始终为 NULL)
- r - 转置数据集并计算出现次数