From 6d3432a8ab6aec013366893c1b46b787af67a4a1 Mon Sep 17 00:00:00 2001 From: Stefan Korn Date: Fri, 12 Jun 2026 15:18:37 +0200 Subject: [PATCH] #4732 - Limit the amount of items for metastore schema API request --- modules/dkan_metastore/docs/openapi_spec.json | 14 +++++++++++++- .../src/Controller/MetastoreController.php | 19 ++++++++++++++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/modules/dkan_metastore/docs/openapi_spec.json b/modules/dkan_metastore/docs/openapi_spec.json index 5a1e7996f5..9442f74c6c 100644 --- a/modules/dkan_metastore/docs/openapi_spec.json +++ b/modules/dkan_metastore/docs/openapi_spec.json @@ -22,6 +22,17 @@ "required": true, "allowEmptyValue": false, "examples": [] + }, + "limit": { + "name": "limit", + "in": "query", + "description": "Limit the output of items, mainly for testing purposes.", + "schema": { + "type": "integer", + "default": 10 + }, + "style": "form", + "allowEmptyValue": true } }, "responses": { @@ -203,7 +214,8 @@ "tags": [ "Metastore" ], "parameters": [ { "$ref": "#/components/parameters/schemaId" }, - { "$ref": "#/components/parameters/showReferenceIds" } + { "$ref": "#/components/parameters/showReferenceIds" }, + { "$ref": "#/components/parameters/limit" } ], "responses": { diff --git a/modules/dkan_metastore/src/Controller/MetastoreController.php b/modules/dkan_metastore/src/Controller/MetastoreController.php index 0103d89235..b3a2aac822 100644 --- a/modules/dkan_metastore/src/Controller/MetastoreController.php +++ b/modules/dkan_metastore/src/Controller/MetastoreController.php @@ -102,7 +102,7 @@ public function getAll(string $schema_id, Request $request) { ? $this->service->swapReferences($object) : $this->service->removeReferences($object); return (object) $modified_object->get('$'); - }, $this->service->getAll($schema_id)); + }, $this->service->getAll($schema_id, $this->wantLimitedAmountOfItems($request) ? 0 : NULL, $this->wantLimitedAmountOfItems($request) ?? NULL)); $output = array_values($output); return $this->apiResponse->cachedJsonResponse($output, 200, [$schema_id], $request->query); @@ -159,6 +159,23 @@ private function wantObjectWithReferences(Request $request) { return TRUE; } + /** + * Determine if we want to limit the number of items in the response. + * + * @param \Symfony\Component\HttpFoundation\Request $request + * The request object. + * + * @return ?integer + * number of items or NULL if we want no limit. + */ + private function wantLimitedAmountOfItems(Request $request) { + $param = $request->get('limit', FALSE); + if ($param === FALSE) { + return NULL; + } + return (int) $param; + } + /** * Implements POST method. *