您可以使用很多东西来创建休息服务,然后几乎任何东西都可以使用它们.特别令人敬畏的是能够在你的网络浏览器中点击它们,因为我们都非常熟悉它们.
当我需要一个"快速而肮脏"的休息解决方案时,我使用Restlet - 我不会声称它是唯一的解决方案,但它是我曾经使用过的最简单的解决方案.我在会议上确实说过"我可以在10分钟内完成XYZ." 会议中的其他人打电话给我,当然,使用Restlet我能够运行一个功能正常的REST服务器,运行时我说会在会议中得到(非常简单)的功能.它很漂亮.
这是一个有一个方法的准系统服务器,返回当前时间.运行服务器并按下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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是它使用的"当前时间资源":
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;
}
}
Run Code Online (Sandbox Code Playgroud)