Merci pour cet excellent exemple [1] 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 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:
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:
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.