pagination_items_per_page 和 pagination_maximum_items_per_page 之间的 API 平台差异

问题描述

在 API 平台中存在两种不同的设置,我不清楚它们之间有什么区别。这是 pagination_items_per_pagepagination_maximum_items_per_page。在 pagination documentation 中详细说明了如何配置这些设置,但没有说明何时应该使用它。

认(全局)配置如下,如configuration documentation中所示。

api_platform:
    defaults:
        # The default number of items per page.
        pagination_items_per_page: 30

        # The maximum number of items per page.
        pagination_maximum_items_per_page: ~

我也关注了this Symfony Casts API 平台分页的话题,那里只用到了 pagination_items_per_page 的设置。这表明在大多数情况下,此设置可能是您所需要的。

当您设置 pagination_items_per_page 时,是否还没有设置将返回的项目数量。您什么时候使用 pagination_maximum_items_per_page

解决方法

正如您在 source code 中看到的:

  • pagination_items_per_page 定义每页项目的默认值,可以通过请求覆盖
  • pagination_maximum_items_per_page 定义可能由用户提供的值的上限,以避免用户通过请求所有
  • 来攻击您的系统
,

由于有一项设置允许 API 的使用者通过查询参数更改结果数量,因此 pagination_maximum_items_per_page 可以确保用户输入的值不会太大而导致结果过大您的资源很大。

要允许分页作为全局查询参数,请使用以下配置:

api_platform:
    defaults:
        pagination_client_enabled: true
        pagination_client_items_per_page: true

我仍然有一个悬而未决的问题这是否是您使用 pagination_maximum_items_per_page 的唯一情况,或者此设置是否也阻止了特定资源的非常大的分页设置(使用:@ApiResource(attributes={"pagination_items_per_page"=9999}) 例如),如果该值超过每页设置的最大值,则覆盖该值。