brevet.txt 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. GridFTP is an extension of the File Transfer Protocol (FTP) for grid computing.
  2. There are multiple implementations of the protocol; the most widely used is that provided by the Globus Toolkit.
  3. Infrastructure
  4. trouver l'infrastructure de test --> elixir (ELIC), ELI ? SGSI ?
  5. connexion en GB: CISM (DCIII) ou SGSI (Pythagore, Cyclotron)
  6. configuration: environnement Linux, gateway, vrtualisation (docker, virtualBox ?), agrégation de liens, etc
  7. using a GridFTP client
  8. installing and configuring a GridFTP server
  9. persistence et reproductibilité aisée de la configuration (via Ansible ?)
  10. trouver l'infrastructure de production (stockage, contrôle, etc)
  11. versionning du projet: git ou mercurial
  12. synergie: CISM - SRI - ELI/ELIC
  13. Application
  14. architecture 3-tiers à client léger
  15. couches présentation & middleware:
  16. plusieurs langages possibles: PHP, R, python, Java, Nodejs
  17. choix (ou pas) de frameworks associés: Zend ou Symfony, Shiny, Django, Spring, Express, etc.
  18. couche middleware:
  19. objectif de programmation fonctionnelle (scala ?)
  20. Idéal: "Language Agnostic" pour les différentes tâches
  21. couche accès aux données: MongoDB, MySQL, PostgresSQL
  22. 1) simple (via MySQL)
  23. 2) puis via DB distribuée.
  24. - multi-sites UCL
  25. - puis multi-sites extérieurs ?
  26. Données
  27. - données locales, traitement "on the fly", DB(s) locales 130.104
  28. - données externes
  29. - à posteriori (DB & protocoles connus)
  30. - à priori (infos de structures à soumettre)
  31. - données externes
  32. - indexées: traitement "on the fly" (batch process possible sur DB distante)
  33. - non-indexées: traitement différé (DB distante accessible en interactif uniquement)
  34. Scénarios pour les données à posteriori et non-indexées:
  35. - téléchargement tiers + demande d'intégration aux DB locales
  36. - téléchargement à travers l'appli + intégration auto aux DB locales
  37. Catégorie(s): Application scientifique, application web, application de gestion
  38. Ce projet a pour but de créer une interface de gestion de données sous forme de web service. Le but étant de créer une application web conforme à l'architecture REpresentational State Transfer (REST), une architecture orientée services (SOA) avec le patron de conception modèle-vue-contrôleur (MVC).
  39. https://en.wikipedia.org/wiki/Minimum_viable_product
  40. Introduction
  41. Contexte : Décrire brièvement l’environnement dans lequel s’inscrit le projet (stratégie, enjeux, domaine, etc.)
  42. Historique : Donner un bref historique du contexte dans lequel s’inscrit le projet
  43. Description de la demande
  44. Les objectifs : Définir les résultats que le projet doit atteindre
  45. Produit du projet : Proposer une description générale de ce produit
  46. Les fonctions du produit : Lister et justifier les principales fonctionnalités du produit
  47. Contraintes
  48. Contraintes de délais : Spécifier la date de livraison du produit et les éventuelles échéances intermédiaires
  49. Contraintes matérielles : Spécifier le matériel nécessaire au bon fonctionnement du produit
  50. Autres contraintes : Spécifier les éventuelles contraintes à prendre en compte dans le cadre du projet (normes techniques, clauses juridiques, etc.)
  51. Déroulement du projet
  52. Planification : Représenter les grandes phases du projet et les étapes principales
  53. Ressources : Lister les ressources humaines et matérielles
  54. Organisation : Décrire l’ensemble des activités introduites dans l’organigramme des tâches de la gestion de projet (Décomposition en tâches, Structure des équipes)
  55. https://www.appvizer.fr/magazine/services-informatiques/framework/django/developpement-web-serveur-ou-client
  56. http://apprendre-python.com/page-django-introduction-python
  57. Un framework est un cadre qui permet de structurer le travail des développeurs grâce à un ensemble d'outils, une structure et des modèles prêts-à-l'emploi.
  58. Étant donné l'étendue des développements à effectuer pour concevoir une application Web moderne, un framework est indispensable.
  59. Django est un framework Backend Open Source développé en Python. Il a été spécialement créé pour réaliser des sites Web puissants et de haut niveau.
  60. Python est un avantage car c'est le langage le plus utilisé par les chercheurs en ELIC. En outre, les services IT de l'UCL utilisent également ce framework pour les nouveaux développements web.
  61. Une alternative solide est Ruby on Rails (RoR). Il est le framework MVC libre le plus populaire. Ce framework a été conçu pour développer des applications Web plus rapidement. Il permet aux développeurs de créer des fonctionnalités avec moins de code que d'autres frameworks.
  62. Mais si RoR nécessite peu de configuration, il exige aussi plus de conventions. En outre, Le niveau d'expertise pour se lancer est une barrière à l'entrée pour les débutants. Enfin Ruby nécessite des ressources serveur plus importantes que Django et des frameworks PHP, et sa technologie comme son utilisation sont en déclin.
  63. Framework Full-Stack (il est très facile de combiner Django et Angular) et tout clé en main : modèles, côté serveur, panneau d'administration pour configurer un site sans coder, etc.
  64. Il utilise le patron de conception modèle-vue-contrôleur (MVC), c'est à dire que la structure du framework sépare les données (models) qui sont séparées des traitements (controller) qui sont eux-mêmes séparés de la vue (view/template).
  65. C'est également un outil idéal pour un projet collaboratif.
  66. Enfin, Django étant très populaire auprès des développeurs web, de nombreux projets sont apparus autour du framework. Par exemple dans notre cas, Ncdjango est un ensemble d'outils de gestion de données et de géotraitement écrits en Python qui fonctionnent sur des données NetCDF.
  67. Application web serveur Python/Django (raison: choix en interne UCL) + Docker
  68. https://blog.imirhil.fr/2016/10/09/docker-container-hell.html
  69. Environnement de développement avec Vagrant
  70. Docker est un logiciel libre qui automatise le déploiement d'applications dans des conteneurs logiciels. "Docker est un outil qui peut empaqueter une application et ses dépendances dans un conteneur isolé, qui pourra être exécuté sur n'importe quel serveur Linux". Ceci permet d'étendre la flexibilité et la portabilité d’exécution d'une application.
  71. Django est un cadre applicatif open-source de développement web en Python (Framework), et il a pour objectif de rendre le développement web simple et rapide. Il embarque tous les composants utiles, que ce soit la gestion de vues, authentification, le mapping objet-relationnel, une documentation détaillée, etc.
  72. PyCharm est un environnement de développement intégré utilisé pour développer en Python ainsi qu'avec Django. Il propose la possibilité de débuger en direct dans un conteneur Docker.
  73. Vagrant est un logiciel libre et open-source pour la création et la configuration des environnements de développement virtuel. Il peut être considéré comme un wrapper autour de logiciels de virtualisation comme VirtualBox.
  74. https://www.supinfo.com/articles/single/5779-bien-debuter-avec-django-docker
  75. Scaling Django: https://djangobook.com/scaling-django/
  76. Django est généralement considéré par de nombreux développeurs comme un framework Web MVC, mais il peut également être utilisé pour créer un back-end (développement orienté serveur), qui dans ce cas est une API.
  77. Comme nous souhaitons mettre à disposition des données pour quelles soient utilisées sur d’autres plateformes ou que nos données intéragissent avec d’autres, une architecture REST ("REpresentational State Transfer") semble appropriée ici.
  78. L'architecture REST est plus axée sur un modèle orienté ressources (les données, dans notre cas) que sur un modèle orienté fonctions. Elle imite la façon dont le web lui-même fonctionne dans les échanges entre un client et un serveur.
  79. REST constitue donc une méthode d'intégration efficace puisque le service à développer ici concerne surtout la récupération de données. Aussi, plutôt que de définir toute une API (interfaces de programmation d'application) personnalisée mieux vaut utiliser un standard de manipulation des données CRUD (Create, Read, Update, Delete : créer, lire, mettre à jour, supprimer), qui "correspond" aux opérations HTTP (HyperText Transfert Protocol) GET, PUT, POST et DELETE. Ce fonctionnement ne repose pas sur la seule utilisation de ces opérateurs, mais sur une combinaison avec des URI.
  80. Le "Django REST framework" va nous permettre de créer plus facilement une API REST sur notre application Django.
  81. Un interfacage avec Amazon S3 serait un atout supplémentaire
  82. https://medium.com/backticks-tildes/lets-build-an-api-with-django-rest-framework-32fcf40231e5
  83. https://medium.com/python-pandemonium/building-and-deploying-an-enterprise-django-web-app-in-16-hours-79e018f7b94c
  84. L'URI constitue la clé unique d'une ressource spécifique. Si cette ressource affiche des relations avec d'autres ressources – par exemple, une Commande associée à une Personne – les URI jouent le rôle des clés étrangères qui permettent de parcourir ces relations. Sachant que l'architecture REST tire parti de la technologie d'hypermédia en tant que moteur de l'état des applications HATEOAS (Hypermedia As The Engine Of Application State), il ne reste plus à l'utilisateur qu'à extraire l'URI de la représentation de la ressource et d'exécuter une opération HTTP GET pour accéder aux informations.
  85. La seule élimination de WSDL et SOAP ne donne pas une architecture REST.
  86. Parallèlement, la technologie HATEOAS est essentielle à la flexibilité. Que se passe-t-il lorsque la structure doit changer ? Si le parcours vers ces relations est spécifié dynamiquement via des liens intégrés à la réponse, vos utilisateurs n'ont pas forcément besoin de changer. De plus, ne pas être contraint à une définition et une validation d'interface rigides permet d'ajouter des éléments en fonction des besoins. Si c'est important pour l'utilisateur, il modifiera son code ; mais ce serait le cas avec n'importe quelle autre technologie.
  87. L'approche HATEOAS est très importante mais malheureusement souvent oubliée. Beaucoup pensent que l'architecture REST consiste simplement à se débarrasser de l'enveloppe SOAP et du langage WSDL (Web Services Description Language), mais ce n'est pas le cas. L'architecture REST ne nécessite aucun langage de description d'interface, comme WSDL, et fonctionne parfaitement non seulement avec le langage XML (eXtensible Markup Language), mais aussi avec JSON (JavaScript Object Notation) et tout autre type de support que vous souhaitez prendre en charge.
  88. C'est là sa grande force ; elle favorise la compatibilité au niveau de la couche de présentation, qu'il s'agisse d'une application bureautique, Web ou mobile. La seule élimination de WSDL et SOAP ne donne pas une architecture REST. Dans l'exemple Personne/Commande ci-dessus, le retour d'un code XML pour une Commande comportant un élément appelé <ID_Personne> ne rend pas le fonctionnement compatible REST, ou « RESTful », si l'utilisateur n'est pas en mesure d'effectuer une simple opération HTTP GET sur la valeur de cet identifiant. Un simple code XML/HTTP ne donne pas une architecture REST.
  89. Autre défi de l'architecture REST, elle peut conduire à un modèle plus fin. Quand fournissez-vous un lien dans vos réponses, plutôt que les données réelles issues d'une relation ? Argument à décharge, il s'agit d'un choix conceptuel qui reste possible. Ainsi, rien ne vous empêche de renvoyer un lien à suivre, en même temps qu'une partie des données elles-mêmes. Considérez l'opération comme une jointure à laquelle s'ajouterait le renvoi d'une clé étrangère permettant d'obtenir davantage de données.
  90. Enfin, si la simplicité de REST s'avère plutôt attrayante, elle rend parallèlement plus difficile la création d'outils adaptés. Si vous envisagez des services SOAP ou XML pour ces outils, WSDL ou XSD (ou les deux) sont essentiels à leur mise en oeuvre.
  91. Avec REST, l'affaire est toute autre... Certains outils accepteront les POJO (Plain Old Java Object) ou un schéma relationnel, qu'ils exposeront via REST. De même, rien ne vous empêche de définir un schéma XML pour une représentation XML renvoyée par un service RESTful, et d'utiliser un genre d'API JAXB pour la conversion en Java. Ne perdez cependant pas de vue que s'appuyer sur ces fichiers – notamment si le schéma est repris au moment de l'exécution – génère des contraintes supplémentaires susceptibles de rendre plus coûteuse la prise en charge des modifications.
  92. Globalement, je suis content que la question se soit posée de cette manière, et non du point de vue du classique débat SOAP ou REST. Dans des décisions de ce type, rien n'est absolu ; il y a des avantages et des inconvénients. Quiconque a travaillé dans un service informatique connaît les passions que déchaîne chaque approche et les nombreux exemples de réussites et d'échecs. Il est bien plus important de comparer les forces et les faiblesses de chaque approche à celles de votre organisation.
  93. Pour résumer, si vous publiez une API complexe vers l’extérieur, SOAP vous sera plus utile. Mais pour quelque chose avec une courbe d’apprentissage rapide, des transactions simples et des résultats rapides, ma préférence va à REST.