api-platform / api-doc-parser

Transforms a Hydra API doc in an intermediate representation that can be used for various tasks such as creating smart API clients, scaffolding code or building administration interfaces.
MIT License
104 stars 71 forks source link

fetchResource loads actual items from the API due to wrong queryParameter #115

Open Sirs0ri opened 2 years ago

Sirs0ri commented 2 years ago

API Platform version(s) affected: 2.6.8

Description

The API doc parser uses fetch() via the fetchResource() method to load API metadata, and fails to apply the query parameter { itemsperpage: 0 } correctly to limit the request to only metadata and no API items.

fetchResource() tries to set the query parameter via a secondary options parameter, however fetch() doesn't support that - params have to be part of the url instead.

// Current code:
fetchJsonLd(
  resourceUrl,
  Object.assign({ itemsPerPage: 0 }, options)
)

// Fixed code:
fetchJsonLd(
  resourceUrl + "?itemsPerPage=0",
  options
)

How to reproduce

Possible Solution

Replace the Object.assign() call with an URL including the query parameter, possibly by building an URL:

const url = new URL(resource.url);
const params = new URLSearchParams(["itemsPerPage", 0]);
url.search = params.toString();

fetchJsonLd(url, options)

Additional Context

Please excuse that my code examples are in plain JS, not TS, since I'm not familiar enough with typescript.

fzaninotto commented 3 months ago

ping @soyuka @alanpoulain this one is a real bummer: in every list page of API Platform Admin, it causes a double fetch to the getList endpoint, one without params for introspection (but still returning data), and the other with the correct params.