REST Factory, simplifier les API REST - commentaires REST Factory, simplifier les API REST 2023-06-22T12:01:28Z https://files.spip.net/REST-Factory-simplifier-les-API-REST#comment513622 2023-06-22T12:01:28Z <p>OK, c'est résolu. La bonne syntaxe est en réalité la suivante (il faut mettre la ligne dans un bloc <code class="spip_code spip_code_inline" dir="ltr">location { ... }</code> sinon ça ne fonctionne pas.)</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code> # redirection des APIs location ~ /([\w]+).api([/.](.*))$ { rewrite ^/([\w]+).api([/.](.*))?$ /spip.php?action=api_$1&arg=$3 last; }</code></pre></div> <p>Du coup j'ai mis à jour le wiki</p> REST Factory, simplifier les API REST 2023-06-20T06:59:52Z https://files.spip.net/REST-Factory-simplifier-les-API-REST#comment513606 2023-06-20T06:59:52Z <p>4 mois après je rebondis sur ce message.</p> <p>Je ne sais pas si la syntaxe change en fonction de la version du server mais cette dernière règle ne fonctionne pas chez moi, en Nginx 1.18</p> <p>J'ai un <samp>nginx : [emerg] invalid number of arguments in « rewrite » directive</samp> qui empêche le serveur de redémarrer ... 🤔</p> REST Factory, simplifier les API REST 2023-05-24T04:21:29Z https://files.spip.net/REST-Factory-simplifier-les-API-REST#comment513350 2023-05-24T04:21:29Z <p>Autre chose, je te conseille de lire le guide conception qui est inclu dans le plugin «<small class="fine d-inline"> </small>Guide - Le plugin REST Factory.pdf<small class="fine d-inline"> </small>». Il est plus complet que cet article et donne des exemples d'utilisation.</p> REST Factory, simplifier les API REST 2023-05-24T04:19:04Z https://files.spip.net/REST-Factory-simplifier-les-API-REST#comment513349 2023-05-24T04:19:04Z <p>Pour définir les collections à exposer vu que cela passe par le pipeline liste_ezcollection on peut lire une configuration meta ou autre, il n'y a pas de souci.</p> <p>Pour les fonctions dynamiques faudrait essayer. Ce que je fais c'est que j'appelle dans le code ezREST une fonction d'api xxxx et que c'est elle qui aiguille vers la bonne fonction de service collection_xxxx ou prefixeplugin_xxxx suivant ce que l'on veut. Ces fonctions doivent être dans un include précis ezrest/prefixeplugin.php.</p> <p>Sinon, il est toujours possible de splitter l'include des services en plusieurs sous-includes et d'y faire appel dans l'include parent oui.</p> <p>Après, si tu as des besoins spécifiques il est toujours possible d'étudier des évolutions du plugin.</p> REST Factory, simplifier les API REST 2023-05-15T16:01:29Z https://files.spip.net/REST-Factory-simplifier-les-API-REST#comment513308 2023-05-15T16:01:29Z <p>Je me demandais d'ailleurs s'il n'aurait pas été plus judicieux d'écrire les fonctions comme ça dans ezREST. Par exemple :</p> <div class="precode"><pre class="spip_code spip_code_block language-php" dir="ltr" style="text-align:left;" data-language="php"><code>function collectionner(string $collection, array $conditions, array $filtres, array $configuration) : array { // Initialisation des données de la collection à retourner $contenu = []; return $contenu; }</code></pre></div> <p>et de splitter tout le fichier prefixe.php dans différents fichiers. Par exemple : prefixe_contexte.php, prefixe_reponses.php, prefixe_verifier.php, prefixe_collectionner.php et prefixe_ressourcer.php</p> <p>Au pire, on doit pouvoir au moins splitter le fichier <code class="spip_code spip_code_inline" dir="ltr">prefixe.php</code> dans le plugin utilisateur grâce à des <code class="spip_code spip_code_inline" dir="ltr">include</code> non<small class="fine d-inline"> </small>? Parce qu'il devient vitre très long ce fichier :p</p> REST Factory, simplifier les API REST 2023-05-15T15:43:35Z https://files.spip.net/REST-Factory-simplifier-les-API-REST#comment513307 2023-05-15T15:43:35Z <p>Si on crée dynamiquement la liste des collections à exposer dans le pipeline <code class="spip_code spip_code_inline" dir="ltr">liste_ezcollection</code> (par ex en récupérant la liste des collections via lire_config()), est-ce que ça fonctionnerait bien en cas de modification des collections à exposer ou il faudrait supprimer un cache ou qqe chose du genre<small class="fine d-inline"> </small>?</p> <p>Même question avec des fonctions dynamiques du type :</p> <div class="precode"><pre class="spip_code spip_code_block language-php" dir="ltr" style="text-align:left;" data-language="php"><code><?php $collection = "articles"; $fonction_collectionner = $collection . "_collectionner"; $$fonction_collectionner = function($conditions, $filtres, $configuration) { // Initialisation des données de la collection à retourner $contenu = []; // Récupération des données de la collection conformément aux filtres éventuellement fournis. return $contenu; }; $cond = array(); $filt = array(); $conf = array(); $items = $fonction_collectionner ($cond, $filt, $conf); ?></code></pre></div> REST Factory, simplifier les API REST 2023-01-21T17:09:55Z https://files.spip.net/REST-Factory-simplifier-les-API-REST#comment512562 2023-01-21T17:09:55Z <p>En fait, c'est tout simplement que NGINX ne supporte pas les .htaccess ^^<br class="autobr"> Ce n'était donc pas l'environnement Windows/Apache qui ignorait le .htaccess mais l'environnement Linux/NGINX.<br class="autobr"> Donc la règle à mettre à la racine du vhost dans NGINX :<br class="autobr"> <code class="spip_code spip_code_inline" dir="ltr">rewrite ^/([w] ).api([/.](.*))?$ /spip.php?action=api_$1&arg=$3 last;</code></p> REST Factory, simplifier les API REST 2023-01-21T13:13:52Z https://files.spip.net/REST-Factory-simplifier-les-API-REST#comment512561 2023-01-21T13:13:52Z <p>Ok, non mais la ligne sur l'api est la bonne. Parfois on oublie d'activer le .htaccess à partir du fichier htaccess.txt mais a priori c'est pas le souci.</p> <p>J'avoue qu'à distance je ne vois pas ce qui peut poser problème surtout si tu arrives à faire fonctionner l'api en local.</p> REST Factory, simplifier les API REST 2023-01-21T13:09:04Z https://files.spip.net/REST-Factory-simplifier-les-API-REST#comment512560 2023-01-21T13:09:04Z <p>Merci pour ta réponse Eric. J'ai effectivement pensé au .htaccess. Mais j'ai le même fichier sous Windows/Apache que sous Linux/Nginx. Je me suis dit qu'il était peut-être ignoré sous Windows/Apache alors je suis allé voir dedans. A priori, c'est celui d'origine. J'ai essayé de commenter la ligne qui concerne les APIs pour voir mais sans résultat :<br class="autobr"> <a href="https://pastebin.com/0q87WTtB" class="spip_url spip_out auto" rel="nofollow external">https://pastebin.com/0q87WTtB</a></p> REST Factory, simplifier les API REST 2023-01-21T09:02:42Z https://files.spip.net/REST-Factory-simplifier-les-API-REST#comment512558 2023-01-21T09:02:42Z <p>Hello,</p> <p>As-tu vérifié ton htaccess<small class="fine d-inline"> </small>?</p> REST Factory, simplifier les API REST 2023-01-21T05:09:36Z https://files.spip.net/REST-Factory-simplifier-les-API-REST#comment512557 2023-01-21T05:09:36Z <p>J'avais la même idée pour VueJS. Mais pour l'instant j'ai un problème. Mon API REST fonctionne en local (sur deux postes avec Apache). Mais pas sur le serveur de production (un RPI4 sous proxy NGINX mais je n'ai pas la main sur la conf NGINX). SPIP me renvoie une page 404 alors que les dépôts sont les mêmes (mêmes version de SPIP, mêmes plugins, même BDD). Quelqu'un aurait une idée<small class="fine d-inline"> </small>?</p> <p><a href="https://infojune.fr/http.api/ezrest/" class="spip_url spip_out auto" rel="nofollow external">https://infojune.fr/http.api/ezrest/</a></p> REST Factory, simplifier les API REST 2022-03-19T21:50:50Z https://files.spip.net/REST-Factory-simplifier-les-API-REST#comment510497 2022-03-19T21:50:50Z <p>J'implémente une API manuellement, en utilisant REACT comme front-end et SPIP comme back-end. Si quelqu'un est intéressé, je peux collaborer à la mise en œuvre.<br class="autobr"> J'ai réussi à implémenter les deux et ça a été excellent<small class="fine d-inline"> </small>!</p> <p>« Estoy implementado una Api manualmente, utilizando <strong>REACT </strong> como frond-end, y SPIP como Back-end. Si alguien esta interezado le puedo colaborar con la implementacón. <br class="autobr"> Logre implementarla ambos y me ha ido excelente<small class="fine d-inline"> </small>!! »</p>