Comment créer une API RESTful avec Joomla

11

Je construis des extensions Joomla depuis la v1 mais je dois bientôt mettre en ligne une API que j'ai construite et que j'utilise depuis un certain temps. Actuellement, j'utilise Joomla 2.5 et j'ai écrit des plugins pour ce système:

https://github.com/techjoomla/com_api

Avant de mettre en service, je voudrais autant que possible pérenniser le système. Ce composant API a récemment commencé à être mis à niveau pour fonctionner avec Joomla v3, il empêche donc actuellement la mise à niveau du site. Je pense également que séparer l'API publique et le portail utilisateur est logique car il n'y a aucun avantage à ce qu'il s'agisse d'une extension intégrée car l'API sera utilisée par les applications mobiles.

Le plan actuel est de reconstruire l'API sur un sous-domaine qui nous permettra de mettre à niveau le portail utilisateur. J'ai lu sur le nouveau framework Joomla qui a l'air passionnant. Serait-ce approprié pour créer une API RESTful pour nos applications mobiles? Si oui, sont-ils des conseils pour commencer? J'ai lu que FoF peut être utilisé pour construire une API, serait-ce un bon choix? J'ai vu que le projet Kickstarter avait l'intention de construire exactement ce type d'API, est-ce une option potentielle? Dois-je simplement supprimer le site 2.5 actuel pour le sous-domaine afin qu'il n'exécute que l'API?

Toute suggestion sur la meilleure approche pour construire une API RESTful basée sur Joomla pour l'interaction mobile sera très appréciée.

Joe P
la source
1
Je viens de voir ces nouvelles extensions sur le répertoire d'extensions Joomla qui pourraient vous être utiles: extensions.joomla.org/extensions/core-enhancements/libraries/…
Lodder

Réponses:

8

Selon mon expérience:

À propos du framework Joomla

J'ai essayé de créer une API RESTful simple pour l'authentification intégrée basée sur le framework Joomla. C'est assez complexe, assez différent de l'API Joomla actuelle. De plus, le code source actuel ne peut pas être copié et les bibliothèques peuvent retourner des résultats inattendus (en cours d'exécution dans un environnement différent). Je vais attendre que plus de code soit disponible et qu'il soit plus largement adopté.

À propos du cadre FOF

Je ne développe actuellement qu'avec FOF. Très pratique, beaucoup de RAD, configuration automatique, etc; et le code est compatible avec J2.5 / J3.

Pour une API RESTful, vous pouvez simplement saisir l'exemple todo-fof et ajouter un contrôleur avec l'API. Exemple:

public function getIndexStatus()
{
    // CSRF prevention
    if ($this->csrfProtection)
    {
        $this->_csrfProtection();
    }

    $message['status'] = true;
    $message['error_message'] = 'Status Ok';

    $message = json_encode($message);
    echo $message;
    flush();

    JFactory::getApplication()->close();

}

Vous pouvez également profiter des vues json automatiques. Par exemple, une vue de navigation (default.php) peut générer une sortie json (simplement en ajoutant default_json.phpet echo json_encode...)

Anibal
la source
1
Le seul problème avec FOF si je comprends bien, c'est qu'il n'est plus pris en charge par le développeur dans le noyau Joomla… bien que je comprenne qu'une version de FOF a été redéfinie et va de l'avant, mais pas dans le cadre de Joomla?
Craig
Vous avez raison, mais ce n'est pas du tout un problème. Le FOF de Joomla est assez stable (je n'ai pas encore mis à jour mes extensions). Le nouveau F0F doit être installé en tant que nouvelle bibliothèque (... à la fin, vous devez toujours l'installer dans J2.5 ... et le programme d'installation est prêt pour J3). À l'heure actuelle, 99% du code source n'est pas modifié.
Anibal
Merci pour vos suggestions, je reconnais que le framework Joomla est assez complexe mais j'aime apprendre à l'utiliser. Je voulais essayer d'utiliser le cadre de mon API comme c'est assez simple mais je n'arrive pas à retourner l'en-tête correct pour JSON. J'ai commencé une autre question à ce sujet.
Joe P
6

com_api est certainement un bon moyen de créer des services REST pour votre site si l'extension elle-même n'est pas basée sur FOF / RAD. Cependant, soyez prudent avec quelques pièges si vous prévoyez de créer une instance Joomla distincte uniquement pour l'API

  • Trucs spécifiques au domaine (par exemple: si vous soutenez l'enregistrement des utilisateurs, l'e-mail de bienvenue comprendra un lien vers le sous-domaine de l'API). Cela pourrait être atténué en jouant avec la variable de serveur PHP.
  • De même, les chemins d'image, etc. doivent être corrects, sauf si vous utilisez S3

En dehors de cela, je suis sûr qu'il ne devrait pas y avoir de problème, car cela continuera d'être développé jusqu'à ce qu'il existe une méthode Joomla de facto pour créer des API.

Avertissement: je suis le mainteneur de https://github.com/techjoomla/com_api

Date Ashwin
la source
Merci pour votre réponse, c'est super de savoir que vous continuez à la développer. J'adore le fonctionnement de com_api mais je voulais essayer d'éviter d'exécuter l'intégralité du CMS Joomla juste pour fournir une API. Si je n'arrive pas à faire fonctionner le framework selon mes besoins, je continuerai certainement à l'utiliser.
Joe P
1

Mes deux centimes:

Pour un client, j'avais besoin d'accéder au contenu de son site joomla à partir d'une application pour smartphone. Le contenu a été placé dans com_content, donc au départ j'ai utilisé des flux obRSS. Ensuite, j'ai trouvé jBackend sur JED et l'ai essayé. Il est disponible ici http://www.selfget.com/products/jbackend.html Le code semble très propre et il prend en charge les requêtes RESTful et les réponses JSON. La documentation en ligne est limitée mais suffisamment claire pour les techniciens. Malheureusement pour le moment, il ne prend en charge que com_user et com_content, mais dans mon cas, cela allait bien. Maintenant, je devrais l'utiliser pour un autre client qui utilise K2 CCK. J'essaie de créer un plugin personnalisé pour accéder aux articles et catégories K2, mais au moins je vais enregistrer l'intégralité du code de gestion des demandes. J'ai envoyé un e-mail au développeur et il m'a dit qu'il travaillait sur des modules supplémentaires comme K2 et le forum Kunena, c'est une extension très prometteuse.

WizKid
la source
1

Le site suivant semble être une excellente ressource pour obtenir des directives sur la façon de créer une API JSON RESTful:

http://jsonapi.org/

Pour ce que ça vaut, je lance également un produit API pour Joomla 3.4.x appelé cAPI http://getcapi.org .

Le principal différenciateur ici est que j'ai jalonné mon framework de routage sur un micro-framework Slim. Cela me permet d'intégrer un cadre robuste déjà éprouvé et robuste dans l'instance d'application Joomla. J'ai également créé une architecture de plugin pour les routes de service, ouvrant la porte à des modules complémentaires et à la sécurité des services Web.

Vous pouvez trouver des informations supplémentaires à partir d'autres postes, ici:

/programming/26340885/rest-api-for-joomla-3-0/32706378#32706378

Faites moi savoir si vous avez des questions.

Steve Tsiopanos
la source