Open WPS Platform

Comment configurer des services ZOO

Authors:Nicolas Bozon, Gérald Fenoy, Jeff McKenna, Luca Delucchi
Last Updated:$Date: 2013-03-28 12:51:45 +0100 (Thu, 28 Mar 2013) $

Les services ZOO sont très faciles à créer une fois que vous avez installé le Kernel ZOO et avez choisi le code (dans le langage de votre choix) à transformer pour produire un service ZOO. Voici quelques HelloWorld en Python, PHP, Java et JavaScript avec les liens vers leurs fichiers .zcfg correspondants.

Informations communes

La fonction du traitement pour chaque langage de programmation prend trois arguments: la configuration principale, les entrées et sorties.

Note

Le service doit retourner 3 si le traitement se passe avec succès et sinon il retourne 4 si le traitement se termine avec une erreur.

Python

Vous trouverez ici les informations nécessaires pour déployer votre propre fournisseur de services Python.

Prérquis ZCFG Python

Note

Pour chaque service fourni par votre fournisseur de services ZOO Python, le fichier ZCFG doit être nommé avec le même nom que celui de la fonction Python (la casse des caractères est importante également).

Le fichier ZCFG devrait contenir ce qui suit :

serviceType
Python
serviceProvider

Le nom du module Python à utiliser comme un fournisseur de services ZOO. Par exemple, si votre script, situé dans le même répertoire que votre ZOO Kernel, a été nommé my_module.py alors vous devriez utiliser my_module (le nom du module Python) pour la valeur de serviceProvider dans le fichier ZCFG.

Structure de données Python utilisée

Les trois paramètres de la fonction sont passés au module Python en tant que dictionnaires.

Après, vous trouverez un exemple pour chacun des paramètres

Configuration principale

La configuration principale contient plusieurs informations, certaines d’entre elles sont vraiment utiles pour développer votre service. A la suite par exemple

{
'main': {'lang': 'en-UK',
         'language': 'en-US',
         'encoding': 'utf-8',
         'dataPath': '/var/www/tmp',
         'tmpPath': '/var/www/tmp',
         'version': '1.0.0',
         'mapserverAddress': 'http://localhost/cgi-bin/mapserv',
         'isSoap': 'false',
         'tmpUrl': 'http://localhost/tmp/',
         'serverAddress': 'http://localhost/zoo'
        },
'identification': {'keywords': 'WPS,GIS',
                   'abstract': 'WPS services for testing ZOO',
                   'fees': 'None',
                   'accessConstraints': 'none',
                   'title': 'testing services'
                  },
'lenv': {'status': '0',
         'soap': 'false',
         'cwd': '/usr/lib/cgi-bin',
         'sid': '24709'
        },
'env': {'DISPLAY': 'localhost:0'},
'provider': {'addressCountry': 'it',
             'positionName': 'Developer',
             'providerName': 'Name of provider',
             'addressAdministrativeArea': 'False',
             'phoneVoice': 'False',
             'addressCity': 'City',
             'providerSite': 'http://www.your.site',
             'addressPostalCode': '38122',
             'role': 'Developer',
             'addressDeliveryPoint': 'False',
             'phoneFacsimile': 'False',
             'addressElectronicMailAddress': 'your@email.com',
             'individualName': 'Your Name'
            }
}

Entrées

Les entrées sont quelque chose comme ça

{
'variable_name': {'minOccurs': '1',
                  'DataType': 'string',
                  'value': 'this_is_the_value',
                  'maxOccurs': '1',
                  'inRequest': 'true'
                 }
}

L’accès à la valeur que vous avez à demander pour le paramètre value, doit ressembler à quelque chose comme ceci

yourVariable = inputs['variable_name']['value']

Sorties

La donnée de sorties a une structure très similaire à celle en entrée

{
'result': {'DataType': 'string',
           'inRequest': 'true',
          }
}

Il n’y a pas de paramètre 'value' avant que vous ne l’assignez

inputs['result']['value'] = yourOutputDataVariable

La déclaration de retour doit être un entier correspondant au code d’état de service.

Pour ajouter un message pour le mauvais résultat, vous pouvez ajouter le message conf["lenv"]["message"], par exemple:

conf["lenv"]["message"] = 'Your module return an error'

Fournisseur de service Python ZOO exemple

Le code suivant représente un fournisseur de services Python ZOO simple qui fournit un seul service, celui de HelloPy.

import sys
def HelloPy(conf,inputs,outputs):
   outputs["Result"]["value"]="Hello "+inputs["a"]["value"]+" from Python World !"
   return 3

PHP

<?
function HelloPHP(&$main_conf,&$inputs,&$outputs){
   $outputs["Result"]["value"]="Hello ".$inputs[S][value]." from PHP world !";
   return 3;
}
?>

Java

import java.util.*;
public class HelloJava {
  public static int HelloWorldJava(HashMap conf,HashMap inputs, HashMap outputs) {
     HashMap hm1 = new HashMap();
     hm1.put("dataType","string");
     HashMap tmp=(HashMap)(inputs.get("S"));
     java.lang.String v=tmp.get("value").toString();
     hm1.put("value","Hello "+v+" from JAVA WOrld !");
     outputs.put("Result",hm1);
     System.err.println("Hello from JAVA WOrld !");
     return 3;
  }
}

Javascript

API ZOO

Si vous avez besoin d’utiliser l’API ZOO dans votre service, vous devez d’abord copier zoo-api.js et zoo-proj4js.js où les vos services sont situés (par exemple dans un système Unix system probablement dans /usr/lib/cgi-bin/)

Prérquis ZCFG Javascript

Note

Pour chaque service fourni par votre fournisseur de services ZOO Javascript, le fichier ZCFG doit être nommé avec le même nom que celui de la fonction Javascript (la casse des caractères est importante également).

Le fichier ZCFG devrait contenir ce qui suit :

serviceType
JS
serviceProvider

Le nom du fichier JavaScript à utiliser comme fournisseur de services ZOO. Par exemple, si votre script, situé dans le même répertoire que votre ZOO Kernel, a été nommé my_module.js alors vous devriez utiliser my_module.js.

Structure de données Javascript utilisée

Les trois paramètres de la fonction sont passés à la fonction JavaScript en tant qu’objet.

Fournisseur de service Javascript ZOO exemple

function hellojs(conf,inputs,outputs){
   outputs=new Array();
   outputs={};
   outputs["result"]["value"]="Hello "+inputs["S"]["value"]+" from JS World !";
   return Array(3,outputs);
}