Seaside et REST

By bioskop

Quand on écrit une application web avec Seaside, on se soucie en général peu des urls, et pour cause, celles-ci représentent l’état de l’application, et non le chemin pour accéder à une ressource.

Comment faire alors si l’on veut construire des urls bookmarkables?

Cette question est souvent posée sur la mailing-list, bien que la solution soit relativement connue, j’ai donc décidé d’écrire un article sur le sujet.

Il suffit pour cela de surcharger deux méthodes : #initialRequest: et #updateUrl: dans votre composant principal par exemple. WABrowser utilise cette technique, je vous conseille donc de regarder son fonctionnement.

Imaginons que l’on ait deux composants, MYMainComponent et MYSubComponent :

MYMainComponent>>initialRequest: aRequest
super initialRequest: aRequest.
aRequest fields at: 'contents' ifPresent: [ :contents | self setContents: contents]

MYSubComponent>>updateUrl: aUrl
super updateUrl: aUrl.
aUrl addParameter: 'contents' value: self uri

MYSubComponent>>uri
^'subcomponent'

Vous obtiendrez ainsi des urls du type :

http://foo.bar/maincomponent/?contents=subcomponent

Suivant le type d’url que vous recherchez, pouvez utiliser la methode #addToPath:.

MYSubComponent>>updateUrl: aUrl
super updateUrl: aUrl.
aUrl addToPAth: self uri

L’url obtenue ressemblera à ceci :

http://foo.bar/maincomponent/subcomponent

Noubliez pas d’adapter #initialRequest: à vos besoins.

Concernant le problème de la validité des liens après l’expiration de la session, je vous recommande cet article de Ken Treis.

Laisser un commentaire