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.