用rest创建一个java服务器

Dar*_*der 5 java sockets rest

我需要创建一个休息服务器和客户端.

我偶然发现了使用套接字的本教程.我希望能够使用REST调用,可能是HTTP,因为客户端实际上使用不同的语言.

而不是使用Socketapi java.net.*我应该使用什么?如果我使用Socket API,我可以使用c ++和php与此服务器通信吗?或者我应该使用REST?

任何方向赞赏.

cor*_*iKa 7

您可以使用很多东西来创建休息服务,然后几乎任何东西都可以使用它们.特别令人敬畏的是能够在你的网络浏览器中点击它们,因为我们都非常熟悉它们.

当我需要一个"快速而肮脏"的休息解决方案时,我使用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)