Une interface Open Data permet de fournir les donnĂ©es les plus rĂ©centes Ă  des systĂšmes externes. Il y a peu, nous avons dĂ©veloppĂ© la nouvelle interface Open Data pour ZĂŒrich Tourismus dans Drupal 9.

Le dĂ©ploiement a eu lieu aprĂšs une migration de donnĂ©es complexes et l’implĂ©mentation de nombreuses fonctions spĂ©cifiques au client. Le nouveau site web de ZĂŒrich Tourismus a Ă©tĂ© mis en ligne dĂ©but 2021. Il reposait alors sur la premiĂšre version d’une interface Open Data, qui permet aux partenaires de recourir Ă  des donnĂ©es actuelles depuis le site web.

Conception de l’interface dans Drupal 9

L’interface fonctionnait avec Drupal 7, mais allait devoir faire ses adieux. Les exigences du client Ă©taient claires : l’interface devait ĂȘtre reproduite le plus fidĂšlement possible et implĂ©mentĂ©e dans Drupal 9 au lieu de Drupal 7. La structure des donnĂ©es doit soutenir Schema.org, raison pour laquelle l’interface dans Drupal 7 avait Ă©tĂ© dĂ©veloppĂ©e sur mesure pour ZĂŒrich Tourismus.

Nous voulions utiliser le plus possible de fonctions de la communauté Drupal pour le développement de la nouvelle interface Open Data. Cela contribue à garantir la maintenabilité et la qualité, mais fait aussi gagner du temps.

Il existe plusieurs approches pour construire une telle interface. Et comme souvent, chacune a ses avantages et ses inconvénients.

Approche 1 : utilisation de modules de normalisation existants

Drupal propose plusieurs modules qui satisfont dĂ©jĂ  de telles exigences, par exemple le module core JSON:API. Ces modules sont implĂ©mentĂ©s de maniĂšre trĂšs gĂ©nĂ©rique. Si possible, tous les champs des entitĂ©s sont normalisĂ©s. Par contre, si l’on a besoin d’une toute autre structure ou d’une logique supplĂ©mentaire pour certains champs, il faudra investir dans des ajustements. Notons aussi que ces modules proposent souvent bien plus de fonctions que nĂ©cessaire. La souplesse en souffre et toutes ces fonctions qui ne sont pas utilisĂ©es ne sont pas non plus propices Ă  une bonne vue d’ensemble.

Approche 2 : une normalisation sur mesure, combinée au module RESTful Web Services

Le [module RESTful Web Services] est lui aussi un module core de Drupal(https://www.drupal.org/docs/8/core/modules/rest). GrĂące Ă  lui, intĂ©grer des interfaces REST Ă  un projet Drupal est un vrai jeu d’enfant. Du fait qu’il faut se charger soi-mĂȘme de toute la normalisation, on ne peut pas en dire autant de l’implĂ©mentation de l’interface Open Data avec ce module. Par contre, on profite d’une grande souplesse. Il est donc plus aisĂ© d’obtenir une implĂ©mentation claire et durable.

RĂ©alisation

Nous parvenons Ă  la normalisation Ă  l’aide d’une classe de normalisateurs qui transforme les entitĂ©s Drupal dans les classes de modĂšles que nous avons crĂ©Ă©es. Ces classes reprĂ©sentent les types de Schema.org. Le graphique ci-aprĂšs illustre ce processus Ă  l’aide d’une entitĂ© du type de node place. Ici, le type de modĂšle correspond Ă  LocalBusiness.

Le recours Ă  ces modĂšles permet de sĂ©parer l’affectation et la transformation. Une fonction toArray sur la classe de modĂšle permet de contrĂŽler entiĂšrement la mise en sĂ©rie des donnĂ©es.

L’interface Open Data en action

Les partenaires peuvent relier l’interface Open Data Ă  un client compatible REST et ainsi synchroniser leurs donnĂ©es.

La page de vue d’ensemble sur https://www.zuerich.com/en/data comporte des catĂ©gories de lieux et de possibilitĂ©s d’hĂ©bergement. Pour inclure tous les restaurants de zuerich.com, on indique l’identitĂ© de la catĂ©gorie par un paramĂštre de requĂȘte.

https://www.zuerich.com/en/data?id=74

L’hĂŽtel Schweizerhof ZĂŒrich tire ses donnĂ©es de cette maniĂšre pour la page https://www.hotelschweizerhof.com/en/concierge-service/gastronomy.