Spring 3.0 REST:
primavera utiliza controladores basados anotación, que se pueden usar para unirse a un URL a un método en el controlador. Las anotaciones se utilizan para diferenciar entre los métodos GET y los métodos POST.
@RequestMapping(value="/hotels/{hotel}/bookings/{booking}",
method=RequestMethod.GET)
public String getBooking(@PathVariable("hotel") long hotelId,
@PathVariable("booking") long bookingId, Model model) {
Hotel hotel = hotelService.getHotel(hotelId);
Booking booking = hotel.getBooking(bookingId);
model.addAttribute("booking", booking);
return "booking";
}
Bajo el capó, la variable "hotel" en la cadena de URI se convierte en un largo en la lista de parámetros, como es la reserva. Spring REST también puede ordenar objetos JSON en clases personalizadas utilizando esta misma técnica. Tenga en cuenta que este método está anotado como RequestMethod.GET
, lo que significa que se invoca para las solicitudes GET pero no para las solicitudes POST.
Spring 3.0 REST hace que sea más fácil crear servicios web RESTful eliminando la necesidad de reinventar la rueda o mariscal/unmarshal texto JSON a mano desde/a objetos Java.
Hay una demostración aquí en el blog de SpringSource titulada REST In Spring MVC. La curva de aprendizaje es baja, pero hacer que la demostración funcione puede llevar cierto tiempo gracias a las dependencias. Una vez que tenga la configuración y tenga una demostración en funcionamiento, la parte más difícil debería haber terminado.
Para la integración de IDE, echa un vistazo a Spring Roo. No lo he usado, pero he oído que tiene algunas características que se integran con Eclipse IDE para hacerte la vida más fácil.
Restlets:
Restlets fueron diseñados exclusivamente para descansar. Como resultado, la sobrecarga es mucho menor que la del Spring 3.0. Los Restlets son más adecuados para casos en los que no tiene una GUI y en los que no le preocupa MVC. Restlets puede servir fácilmente como servidor y como cliente. También tiene un servidor integrado que puede ejecutar, lo que elimina la necesidad de un contenedor como Jetty o Tomcat.
He tenido muy poca exposición a Python, pero por lo que he visto de la implementación de Google App Engine del framework webApp, el concepto de enrutador se siente muy similar. Aquellos con un fondo de Python puede encontrar la curva de aprendizaje para ser mucho más bajo:
@Override
public Restlet createInboundRoot() {
Router router = new Router(getContext());
getConnectorService().getClientProtocols().add(Protocol.FILE);
// Serve the files generated by the GWT compilation step.
Directory dir = new Directory(getContext(), LocalReference.createFileReference(new File("war/")));
router.attachDefault(dir);
router.attach("/contacts/123", ContactServerResource.class);
return router;
}
Utiliza GWT en el lado del cliente; Prefiero sacar esa parte ya que me recuerda demasiado a Java Swing. Si bien algunas personas pueden encontrar eso ventajoso, mi preferencia personal es seguir con las tecnologías que se parecen más a la Web.
A continuación se muestra un ejemplo simple de un servidor REST que utiliza el modo independiente. El servidor se ejecuta en el puerto 8182 y escucha las solicitudes GET. Tiene un modelo similar basado en anotaciones como el marco Spring REST, que también ayuda a dividir los diferentes métodos HTTP y los señala en diferentes métodos en sus clases. Este es un ejemplo muy básico "Hello World" RESTO:
public class FirstServerResource extends ServerResource {
public static void main(String[] args) throws Exception {
// Create the HTTP server and listen on port 8182
new Server(Protocol.HTTP, 8182, FirstServerResource.class).start();
}
@Get
public String toString() {
return "hello, world";
}
}
Mira la Restlet Web Site para obtener más información y ejemplos del marco Restlets. Restlets tiene una curva de aprendizaje ligeramente menor que Spring porque está dirigida a REST; como resultado, no contiene toda la funcionalidad extra incluida con Spring que a veces puede dificultar la búsqueda de una respuesta a un problema. Los Restlets son definitivamente el camino a seguir si estás buscando algo ligero.
Ambos dos marcos se ejecutarán en Tomcat, Jetty, así como en Google App Engine.
jersey se ve muy interesante, se verá en él! gracias ;-) –
La anotación de Jersey es muy rica, al menos en comparación con Spring MVC 3.x.Puede aplicar decir '@ PathParam' a una propiedad en su clase' Resource' (básicamente Spring MVC equivalente a la clase 'Controller') en lugar de pasarlo a través del parámetro method ... muy útil especialmente si todas las API en la clase' Resource' requieren esa variable de ruta particular. En Spring MVC 3.x, debe establecer '@ PathVariable' en cada método de la clase' Controller' para lograr el mismo efecto ... o al menos, no sé cómo hacerlo elegantemente en Spring MVC 3 .X. – limc