API REST Woocommerce
Bonjour,
Je cherche à récupérer dans mon application les nom et stock des produits d'une boutique woocommerce.
ça fonctionne à un détail près: seul 10 produits sont récupérés.
En revanche quand je passe directement l'url de la requête dans Safari, l'intégralité des produits sont bien affichés.
J'en déduis que l'API limite le nombre de produits envoyés quand une application autre qu'un navigateur les réclame.
Ma déduction est-elle une hypothèse farfelue?
Si oui, j'aimerais bien savoir ce qui cloche et si non, j'aimerais bien savoir comment lever cette limitation. Je n'ai pas trouvé.
J'ai bien tenté d'interroger ChatGPT qui m'a judicieusement proposé d'ajouter le paramètre "per_page": -1 au paramètre de la requête (j'utilise la bibliothèque Almofire pour ceux qui connaissent) mais cela n'a rien changé.
Réponses
Oui cela sent la pagination.
Sans connaître l'API, c'est difficile de dire ce qu'il en ait.
Alamofire ne t'aidera pas, c'est juste un wrapper autour de
URLSession
. Et ajouterper_page
, oupage
en paramètre, bah ça dépend ce que l'API accepte et prend en compte...Quand tu parles de l'URL dans Safari, tu parles de quoi exactement ?
Par exemple ceci fonctionne parfaitement:
https://www.yoursitename.com/wp-json/wc/v3/products?consumer_key=XXXX&consumer_secret=XXXX
(en remplaçant bien sûr les clé par les vraies et yousitename par le vrai site....)
J'obtiens bien tous les produits.
J'ai le même avis que @Larme, c'est sans aucun doute en rapport avec la pagination.
Oui, vous avez raison.
(J'avais une erreur dans mon code qui faisait que seuls 10 produits s'affichaient. J'ai corrigé.)
Mais maintenant j'arrive à la limite de 100 produits par page. Si je demande plus, je ne reçois plus rien. C'est une limite de l'API.
EDIT:
"Large queries can hurt site performance, so per_page is capped at 100 records. If you wish to retrieve more than 100 records, for example to build a client-side list of all available categories, you may make multiple API requests and combine the results within your application."
Bon, je progresse pas à pas. A chaque problème résolu en voilà immédiatement un autre
J'ai modifié mon code pour afficher le nom et stock des produits woocommerce ET les variations.
La modification pour afficher les variations m'empêche de compiler avec un message très curieux au niveau de la ligne "var body". Le connaissez-vous ?
Failed to produce diagnostic for expression; please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the project
Voici mon bout de code, si à tout hasard quelqu'un voit une ânerie, merci de me la montrer :-) (je sais que .name n'est pas idéal compte tenu de la possibilité d'avoir des doublons mais je ne crois pas que le problème vienne de là)
Je ne suis pas sûr que ce soit clair pour toi, mais ce que tu dois faire n'est pas d'augmenter la tailles des pages (10 produits/page est déjà un bon compromis) mais de demander les pages suivantes. Voilà pourquoi @Larme disait de passer un paramètre
page
dans l'URL.Je ne vois rien d'évident. Dans ce genre de cas, extrais des bouts de vues dans une autre vue ou désactive du code pour voir où ça ne passe pas.
P.S.: c'est bizarre d'avoir des
@State
pour les produits. La vue devrait y accéder par le ViewModel, c'est son rôle.