2011-12-17 12 views
5

Necesito crear un servidor y un cliente de reposo.Crear un servidor java con reposo

Me encontré con este tutorial que utiliza enchufes. Quiero poder utilizar llamadas REST, posiblemente HTTP, porque los clientes estarán en diferentes idiomas.

En lugar de usar Socket api de java.net.* ¿qué debo usar? si uso Socket API, ¿puedo usar C++ y php para comunicarme con este servidor? o debería ir con REST?

cualquier dirección apreciada.

+1

[REST] (http://en.wikipedia.org/wiki/REST) ​​realmente solo tiene sentido en el contexto de HTTP. Definitivamente puede usar los _principles_ detrás de REST usando una API auto escrita que se ejecuta directamente sobre sockets sin formato, pero no sería REST en ese momento. – sarnold

+0

bien quiero ser capaz de comunicarme a través de HTTP. pero no estoy seguro de qué API usar. posiblemente en un puerto personalizado. – DarthVader

Respuesta

6

Hay muchas cosas que puede usar para crear servicios de descanso, y luego pueden ser consumidas por casi cualquier cosa. Lo sorprendente es la capacidad de golpearlos en su navegador web, simplemente porque todos estamos muy familiarizados con ellos.

Cuando necesito una solución de descanso "rápida y sucia", uso Restlet - No afirmaré que es la única solución, pero es la más fácil con la que he trabajado. Literalmente dije en una reunión que "podría tener XYZ en 10 minutos". Alguien más en la reunión me llamó y, efectivamente, al usar Restlet pude ejecutar un servidor REST en funcionamiento con las características (muy simples) que dije que obtendría en la reunión. Fue bastante astuto.

Aquí hay un servidor barebones que tiene un método, devolviendo la hora actual. Al ejecutar el servidor y presionar 127.0.0.1:12345/sample/time se devolverá la hora actual.

import org.restlet.Application; 
import org.restlet.Component; 
import org.restlet.Context; 
import org.restlet.Restlet; 
import org.restlet.data.Protocol; 
import org.restlet.routing.Router; 

/** 
* This Application creates an HTTP server with a singple service 
* that tells you the current time. 
* @author corsiKa 
*/ 
public class ServerMain extends Application { 

    /** 
    * The main method. If you don't know what a main method does, you 
    * probably are not advanced enough for the rest of this tutorial. 
    * @param args Command line args, completely ignored. 
    * @throws Exception when something goes wrong. Yes I'm being lazy here. 
    */ 
    public static void main(String...args) throws Exception { 
     // create the interface to the outside world 
     final Component component = new Component(); 
     // tell the interface to listen to http:12345 
     component.getServers().add(Protocol.HTTP, 12345); 
     // create the application, giving it the component's context 
     // technically, its child context, which is a protected version of its context 
     ServerMain server = new ServerMain(component.getContext().createChildContext()); 
     // attach the application to the interface 
     component.getDefaultHost().attach(server); 
     // go to town 
     component.start(); 

    } 

    // just your everyday chaining constructor 
    public ServerMain(Context context) { 
     super(context); 
    } 

    /** add hooks to your services - this will get called by the component when 
    * it attaches the application to the component (I think... or somewhere in there 
    * it magically gets called... or something...) 
    */ 
    public Restlet createRoot() { 
     // create a router to route the incoming queries 
     Router router = new Router(getContext().createChildContext()); 
     // attach your resource here 
     router.attach("/sample/time", CurrentTimeResource.class); 
     // return the router. 
     return router; 
    } 

} 

Y aquí es el 'recurso hora actual' que utiliza:

import org.restlet.representation.Representation; 
import org.restlet.representation.StringRepresentation; 
import org.restlet.resource.Get; 
import org.restlet.resource.ServerResource; 

/** 
* A resource that responds to a get request and returns a StringRepresentaiton 
* of the current time in milliseconds from Epoch 
* @author corsiKa 
*/ 
public class CurrentTimeResource extends ServerResource { 

    @Get // add the get annotation so it knows this is for gets 
    // method is pretty self explanatory 
    public Representation getTime() { 
     long now = System.currentTimeMillis(); 
     String nowstr = String.valueOf(now); 
     Representation result = new StringRepresentation(nowstr); 
     return result; 
    } 
} 
+0

necesita comprender algo, estoy interesado en crear un servidor, como el servidor HTTP, con JAVA, personalizado, que escuchará las conexiones entrantes a través de llamadas REST. ¿Puedo usar Restlet para eso? – DarthVader

+1

Sí, puedes hacer eso con Restlet. – corsiKa

+0

Lo intentaré. Gracias. – DarthVader

2

JAX-RS es la API REST en Java. Hay muchas implementaciones, pero las principales son Jersey (la implementación de referencia), Apache's CXF y Restlet.

0

Yo diría que vaya con un servicio RESTful basado en HTTP. Se está convirtiendo rápidamente en un estándar de facto. Compruebe mi respuesta a este similar question para ver los pros y los contras.

1

Descargar JBoss 7. Problema resuelto.

Heres un servicio reparador:

@Path("/myservice") 
public class MyService { 

    @GET 
    @Produces(MediaTypes.TEXT_PLAIN) 
    public String echoMessage(@QueryParam("msg") String msg) { 
     return "Hello " + msg; 
    } 
} 

Crear una guerra. Desplegar. Abre el navegador e ingresa al http://myserver/myapp/myservice?msg=World. ¡Hecho!

+0

lol. Escuché que Jboss apesta. – DarthVader

+0

¿Quién te dijo eso? JBoss 6 tenía graves problemas de rendimiento, pero aparte de eso, la serie siempre ha sido sólida. JBoss 7 es un asesino. – Perception

+0

¿necesito un tarro para eso? ¿Qué API utilizo para hacer esto? – DarthVader

0

Este es el mejor que hay. Spring MVC que tiene muchas capacidades de REST en sí mismo. Esto requiere solo un archivo jar para ser incluido. Y está todo listo para usar todas sus capacidades. Incluso tan simple como el hombre de abajo explicó en JBOSS y mucha más flexibilidad también.

http://java.dzone.com/articles/spring-30-rest-example

2

Por lo general, no se crea un servidor. Usted crea una aplicación web y la implementa en el servidor o en el contenedor de servlets. Algunos contenedores de servlets se pueden embebir en su aplicación web, p. Embarcadero. Los contenedores de servlets gratuitos Poppular son Tomcat, Glassfish, Jetty, etc.

Para Restlet, no es un contenedor de servlet. Es un marco que le permite crear una aplicación wep con estilos RESTful. Entonces esto no debe confundirse.

Si decide usar el contenedor de servlets, entonces el problema es cómo puede crear una aplicación web con los estilos RESTful. REST no es una tecnología, es un principio de diseño. Es un concepto de cómo debes crear la interfaz.

El diseño de REST es sin estado, por lo que no necesita almacenar el estado de la transacción. Toda la información de una solicitud debe ser suficiente para producir una resposición al cliente.

Existen varios frameworks servlet que le permiten implementar los estilos REST con facilidad. Algunos de ellos son muy sofisticados, p. Marco de primavera.

0

Uso JBoss 6 con RestEasy. He creado un tutorial ubicado en here. Espero que esto te ayude.

0

También le invitamos a ver mi ejemplo muy simple para la implementación del servidor REST here.