Réponse à l'article de Laurent Jégou sur son blog

Merci pour cet excellent exemple de web processing.

En adaptant sensiblement votre code Python et en l'accompagnant d'un fichier de configuration du service (.zcfg, qui contient l'intégralité des méta-données concernant le service), nous pouvons facilement créer un ServiceProvider Python qui contienne un web service similaire en utilisant le projet ZOO (http://www.zoo-project.org). Les métadonnées (.zcfg) et la logique (le code du service) sont séparées dans le ZOO, du coup le code du ServiceProvider Python ne contenant que votre service exemple peut revenir à ca:

import rpy2.robjects as robjects
import sys

def discretise(main,inputs,outputs):
 ; # the following lines are need only because of
  # strange issue specific to R displaying msg :
  # Loading required package: class
  try:
    sys.stdout.close()
  except:
    pass
  # The logic code
  robjects.r('library(e1071)')
  robjects.r('library(classInt)')
  robjects.r('library(XML)')
  robjects.r('data(jenks71)')
  robjects.r('doc = xmlRoot(xmlTreeParse("%s"))' % inputs['donnees']['value'])
  xsa = robjects.r.xmlSApply
  jenksData = robjects.r('xmlSApply(doc, function(x) as.numeric(xmlSApply(x, xmlValue)))')
  ci = robjects.r.classIntervals
  tmp=int(inputs['nbClasses']['value'])
  out = str(ci(jenksData, n = tmp, style = inputs['methode']['value']))
  outputs["Result"]={"value": out,"dataType":"string"}
 &nbs;preturn 3

Et le .zcfg permet de renvoyer une réponse à une requete de type DescribeProcess comme suit:

http://demo.zoo-project.org/zoo/?version=1.0.0&service=Wps&request=DescribeProcess&Identifier=discretise

L'execution du service est bien sur lancée par une requête Execute (Notez l'"identifier" du service qui n'est autre que son nom, ici 'discretise'), qui nous renvoit un WpsExecuteResponse valide, comme suit:

http://demo.zoo-project.org/zoo/?version=1.0.0&service=Wps&request=Execute&Identifier=discretise&datainputs=nbClasses=6;methode=jenks;donnees=Reference@xlink:href=http://www.geotests.net/test/jenks/values.xml

Le projet ZOO, qui sera relâché courant 2010, permet donc de créer facilement des webservices et ce en utilisant différents langages de programmation. A la différence de PyWPS ou les services doivent etre obligatoirement codé en Python (ou de 52North ou les services doivent etre codés en Java), ZOO Kernel supporte les langages C, Python, PHP, Java et Fortran comme le démontrent les ExecxuteResponse ci-dessous. Celà donne la liberté au développeur de transformer rapidement du code existant en webservice, dans son langage préféré !

Vous noterez de plus dans les liens ci-dessous, l'utilisation du paramètre storeExecuteResponse, qui comme son nom l'indique permet de stocker la réponse sur le serveur. Actuellement, sur ce serveur de démonstration, nous supprimons régulièrement les fichiers se trouvant dans le répertoire temporaire, la persistance ne dépasse donc pas la demie-heure. Cela pourrait être utile pour un client qui voudrait utiliser un cache par exemple.

L'équipe ZOO Project.

Posted in Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | printer friendly version | 2069 lectures

Posté par djay le 9 Janvier, 2010 - 13:35.

Accéder aux archives

« Novembre 2024  
Lun Mar Mer Jeu Ven Sam Dim
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

Ouverture de session

Qui est en ligne

Il y a actuellement 1 utilisateur et 107 invités en ligne.
Locations of visitors to this page
Drupal Top Sites - Ultimate Drupal Exposure