sábado, 15 de agosto de 2009

Rest con Restlet

Restlet es un framework que lleva el concepto de los servlet para generar servicios web. Si vamos a una definición de Rest (http://diegograf.blogspot.com/2009/08/una-alternativa-mas-simple-soap-en-lo.html) veremos que la idea principal es hacer servicios web simples.

La simpleza puede verse de quien consume el servicio web. Restlet hace simple el desarrollo de web services. Veamos un “hola Mundo” usando Restlet 2.0

1. package firstSteps;

2.

3. import org.restlet.resource.Get;

4. import org.restlet.resource.ServerResource;

5.

6. /**

7. * Resource which has only one representation.

8. *

9. */

10. public class HelloWorldResource extends ServerResource {

11.

12. @Get

13. public String represent() {

14. return "hello, world";

15. }

16.

17. }

Vemos que hemos creado un recurso el cual se va a publicar por medio del método GET. Ahora hagamos una aplicación:

1. package firstSteps;

2.

3. import org.restlet.Application;

4. import org.restlet.Restlet;

5. import org.restlet.routing.Router;

6.

7. public class FirstStepsApplication extends Application {

8.

9. /**

10. * Creates a root Restlet that will receive all incoming calls.

11. */

12. @Override

13. public Restlet createRoot() {

14. // Create a router Restlet that routes each call to a

15. // new instance of HelloWorldResource.

16. Router router = new Router(getContext());

17.

18. // Defines only one route

19. router.attach("/hello", HelloWorldResource.class);

20.

21. return router;

22. }

23. }

Como vemos creamos un router el cual es el encargado de publicar nuestro servicio web. Ahora configuramos el contexto para que cuando le enviemos un pedido a una URL, nuestro servidor lo delegue al servlet de rest.

1. <?xml version="1.0" encoding="UTF-8"?>

2. <web-app id="WebApp_ID" version="2.4"

3. xmlns="http://java.sun.com/xml/ns/j2ee"

4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

5. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

6. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

7. <display-name>first steps servlet</display-name>

8.

9. <context-param>

10. <param-name>org.restlet.application</param-name>

11. <param-value>

12. firstSteps.FirstStepsApplication

13. </param-value>

14. </context-param>

15.

16.

17. <servlet>

18. <servlet-name>RestletServlet

19. <servlet-class>

20. org.restlet.ext.servlet.ServerServlet

21. </servlet-class>

22. </servlet>

23.

24. <!-- Catch all requests -->

25. <servlet-mapping>

26. <servlet-name>RestletServlet</servlet-name>

27. <url-pattern>/*</url-pattern>

28. </servlet-mapping>

29. </web-app>

Bueno con eso estamos, mmm…

Todavía nos faltan los jars por suerte se pueden importar con maven. Dejo el link para configurar el repositorio de restlet http://www.restlet.org/downloads/maven

Si no podemos instalar los jars necesitamos 2 :

org.restlet.jar

org.restlet.ext.servlet_2.5.jar

Lo pueden bajar de http://www.restlet.org/downloads/2.0/restlet-jse-2.0m4.zip e instalar de esta forma :

mvn install:install-file -DgroupId=org.restlet -DartifactId= org.restlet -Dversion=2.0.0 -Dpackaging=jar -Dfile=dondeDejasteElJar/elJar.jar

mvn install:install-file -DgroupId=org.restlet -DartifactId= org.restlet.ext -Dversion=2.0.0 -Dpackaging=jar -Dfile=dondeDejasteElJar/elJar.jar

1. <dependency>

2. <groupId>org.restlet</groupId>

3. <artifactId>org.restlet</artifactId>

4. <version>2.0.0</version>

5. </dependency>

6. <dependency>

7. <groupId>org.restlet</groupId>

8. <artifactId>org.restlet.ext</artifactId>

9. <version>2.0.0</version>

10. </dependency>

Levanten el jetty o tomcat y luego http://127.0.0.1/contexto/ hello y hay esta nuestro servicio!!