C'è un sacco di cose che è possibile utilizzare per creare servizi di riposo, e quindi possono essere consumati praticamente da qualsiasi cosa. Di particolare suggestione è la possibilità di colpirli nel tuo browser web, solo perché siamo tutti così familiari con loro.
Quando ho bisogno di una soluzione di riposo 'rapida e sporca', io uso Restlet - Non dirò che è l'unica soluzione, ma è la più semplice con cui abbia mai lavorato. Ho letteralmente detto in un incontro "Potrei avere XYZ in 10 minuti." Qualcun altro nella riunione mi ha chiamato su questo, e abbastanza sicuro, utilizzando Restlet I è stato in grado di ottenere un server REST funzionante in esecuzione con le (molto semplici) funzionalità che ho detto che avrei partecipato alla riunione. Era piuttosto lucido.
Ecco un server barebone con un metodo, che restituisce l'ora corrente. L'esecuzione del server e il raggiungimento di 127.0.0.1:12345/sample/time
restituiranno l'ora corrente.
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;
}
}
Ed ecco la 'risorsa ora corrente' che utilizza:
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;
}
}
[REST] (http://en.wikipedia.org/wiki/REST) ha davvero senso solo nel contesto di HTTP. È possibile utilizzare prontamente _principles_ dietro REST utilizzando un'API autoprogrammata che viene eseguita direttamente su socket non elaborati, ma a quel punto non sarebbe REST. – sarnold
beh, voglio poter comunicare tramite HTTP. ma non sono sicuro di quale API utilizzare. possibilmente su una porta personalizzata. – DarthVader