Comprendre Sling Model Exporter

Apache Sling Models 1.3.0 lance Sling Model Exporter, un moyen efficace d’exporter ou de sérialiser des objets de modèle Sling Model dans des abstractions personnalisées. Cet article compare le cas d’utilisation traditionnel des modèles Sling Models pour alimenter les scripts HTL, avec le framework Sling Model Exporter pour sérialiser un modèle Sling Model en JSON.

Flux de requête HTTP Sling Model traditionnel

Le cas d’utilisation traditionnel de Sling Models consiste à fournir une abstraction commerciale pour une ressource ou une demande, qui offre aux scripts HTL (ou, précédemment, aux JSP) une interface pour accéder aux fonctions commerciales.

Les modèles courants développent des Sling Models qui représentent les composants ou pages AEM, et qui utilisent les objets Sling Model pour alimenter les scripts HTL avec des données et un résultat final de HTML affiché dans le navigateur.

Flux de requête HTTP Sling Model

Flux de requête Sling Model.

  1. La requête HTTP GET est faite pour une ressource dans AEM.

    Exemple : HTTP GET /content/my-resource.html

  2. Le script approprié se résout en fonction du sling:resourceType de la ressource demandée.

  3. Le script adapte la demande ou la ressource au Sling Model souhaité.

  4. Le script utilise l’objet Sling Model pour générer le rendu de HTML.

  5. Le HTML généré par le script est renvoyé dans la réponse HTTP.

Ce modèle traditionnel fonctionne bien dans le contexte de la génération de HTML puisque le Sling Model peut être facilement exploité via HTL. La création de données plus structurées telles que JSON ou XML est une tâche beaucoup plus fastidieuse, car HTL ne se prête pas à la définition de ces formats.

Flux de requête HTTP Sling Model Exporter

Le Sling Model Exporter d’Apache est fourni avec un exporteur Jackson fourni par Sling qui sérialise automatiquement un objet Sling Model « ordinaire » en JSON. L’exporteur Jackson, bien que configurable, inspecte en détail l’objet Sling Model et génère le JSON en utilisant n’importe quelle méthode « getter » en tant que clés JSON et les valeurs getter sont renvoyées en tant que valeurs JSON.

La sérialisation directe de Sling Models permet de répondre à la fois aux demandes web normales avec leurs réponses HTML créées à l’aide du flux de requête traditionnel Sling Model (voir ci-dessus), mais aussi d’exposer des rendus JSON qui peuvent être consommés par des services web ou des applications JavaScript.

Flux de requête HTTP Sling Model Exporter.

Ce flux décrit le flux à l’aide de l’exporteur Jackson fourni pour produire la sortie JSON. L’utilisation d’exporteurs personnalisés suit le même flux, mais avec leur format de sortie.

  1. Une requête HTTP GET est effectuée pour une ressource dans AEM avec le sélecteur et l’extension enregistrés avec le Sling Model Exporter.

    Exemple : HTTP GET /content/my-resource.model.json

  2. Sling résout le sling:resourceType, le sélecteur et l’extension de la ressource demandée vers un servlet Sling Exporter généré dynamiquement, qui est mappé sur le Sling Model avec l’Exporter.

  3. Le servlet Sling Exporter résolu appelle le Sling Model Exporter par rapport à l’objet Sling Model adapté de la requête ou de la ressource (comme défini par les adaptables des Sling Models).

  4. L’exporteur sérialise le Sling Model en fonction ses options et des annotations de Sling Model qui lui sont spécifiques et renvoie le résultat au servlet de Sling Exporter.

  5. Le servlet de Sling Exporter renvoie le rendu JSON du Sling Model dans la réponse HTTP.

NOTE
Bien que le projet Apache Sling fournisse l’exporteur Jackson qui sérialise Sling Models en JSON, le framework d’exporteur prend également en charge les exporteurs personnalisés. Par exemple, un projet peut mettre en œuvre un exporteur personnalisé qui sérialise un Sling Model en XML.
NOTE
Non seulement l’Sling Model Exporter sérialise les Sling Models, mais il peut également les exporter en tant qu’objets Java. L’export vers d’autres objets Java ne contribue pas au flux de requête HTTP et n’apparaît donc pas dans le diagramme ci-dessus.

Documents annexes

recommendation-more-help
c92bdb17-1e49-4e76-bcdd-89e4f85f45e6