API pagination_items_per_page 和 pagination_maximum_items_per_page 之间的平台差异

API Platform difference between pagination_items_per_page and pagination_maximum_items_per_page

在 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: ~

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

当您设置 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})),如果它超过每页设置的最大值,则覆盖该值。

如您在 source code 中所见:

  • pagination_items_per_page定义每页items的默认值,可以通过request
  • 覆盖
  • pagination_maximum_items_per_page 定义了可能由用户提供的值的上限,以避免用户通过请求 all items
  • 对您的系统进行 DOS