Есть много вещей, которые вы можете использовать для создания служб отдыха, а затем они могут быть использованы практически всем. Особенно удивительно, что вы можете использовать их в своем веб-браузере, просто потому, что мы все с ними знакомы.
Когда мне нужно «быстрое и грязное» решение для отдыха, я использую Restlet - я не буду утверждать, что это единственное решение, но это самое простое, с которым я когда-либо работал. Я буквально сказал на встрече: «Я мог бы поднять XYZ через 10 минут». Кто-то еще на совещании позвал меня на это, и, конечно же, используя Restlet, я смог получить работающий REST-сервер, работающий с (очень простыми) функциями, которые, как я сказал, я получу на совещании. Это было довольно гладко.
Вот сервер barebones, у которого есть один метод, возвращающий текущее время. Запуск сервера и нажатие 127.0.0.1:12345/sample/time
вернет текущее время.
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;
}
}
А вот «текущий ресурс времени», который он использует:
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;
}
}