Le module de recherche peut être étendu à d'autres systèmes dès qu'ils proposent un webservice compatible. Ce document détaille le format du webservice attendu.
Le système de recherche de Combo va lancer une requête HTTP GET sur une URL, en lui envoyant en paramètre (query-string) la chaîne de caractère saisie par l'utilisateur :
GET https://example.net/search/?q=foobar
Le nom du paramètre "q" est en fait libre, dans les exemples qui suivent nous continuerons à l'appeler "q". "foobar" est la chaîne de caractère saisie par l'utilisateur.
Combo peut également envoyer un paramètre contenant l'email de l'utilisateur effectuant la recherche. Cela permet au système tiers de ne renvoyer que les résultats pertinents pour cet utilisateur. Exemple de requête :
GET https://example.net/search/?email=login@example.org&q=foobar
Ici encore le paramètre "email" peut être nommé autrement.
Dans des intégrations plus fortes, si le système tiers est déjà lié à Publik par un SSO, il est possible d'envoyer dans la requête l'identifiant de fédération (sub ou NameID).
La requête GET doit recevoir une réponse en JSON, sous la forme suivante :
GET https://example.net/search/?q=foobar 200 OK Content-type: application/json { "err": 0, "data": [ { "url": "https://files.example.net/dossier/3/", "text": "Dossier foobar", "description": "Dossier numéro <b>3</b>, en date du <i>10/12/2019</i>" }, { ...objet2... }, ... ] }
err
est un entier, 0 indique que tout s'est bien passé. Toute autre valeur est interprétée comme une erreurdata
est une liste des objets trouvés, dans l'ordre de pertinencetext
: nom de l'objet, sur une seule ligne, qui sera affiché à l'utilisateur effectuant la rechercheurl
: l'URL de l'objet, typiquement un lien vers la page du système tiers qui va afficher l'objetdescription
(optionnel) : une description plus longue, autorisant un peu de formatage HTML si besoinUn objet peut contenir d'autres clés dont les valeurs sont jugées utiles à présenter à la personne qui fait une recherche. Par exemple sur une recherche d'usager, on pourrait avoir :
"data": [ { "url": "https://users.example.net/user/3/", "text": "Ferdinand Poitevin", "first_name": "Ferdinand", "last_name": "Poitevin", "dob": "1860-10-09", "phone": "+33123456789", "mobile": "+33612345678", "address": "169 rue du Château, Paris" }, ...
Ces valeurs peuvent être utilisées pour personnaliser le rendu des résultats. Un gabarit sera programmé dans Combo pour afficher le résultat du moteur.
Combo peut envoyer un paramètre « email=... » lors de la recherche. Dans ce cas, les résultats peuvent être modulés en fonction de cet email, qui représente utilisateur qui effectue la recherche.
Il peut être décidé :