java-保持Jersey客户端API函数和REST(Jersey API)服务器函数链接的“正确”正确方法是什么?

我想知道具有更多经验和更复杂项目的人们如何与REST Communication中的这种“丑陋”相处.想象以下问题:

对于我们的REST基础结构中的一个特定资源,我们将需要大量的功能,就我而言,大约有50个功能会导致不同的查询和不同的响应.我试图考虑一个有意义的资源树,并将它们分配给将执行“工作”的方法.之后,服务器资源类如下所示:

@Path("/thisResource")    
public class SomeResource {

    @GET/POST/PUT/DELETE
    @Path("meaningfulPath")
    public Response resourceFunction1 ( ...lots of Params) {

        ... logic ....

    }

//
// lots of functions ...
//

    @GET/POST/PUT/DELETE
    @Path("meaningfulPath")
    public Response resourceFunctionN ( ...lots of Params) {

    ... logic ....
    }
}

为了构造我的客户端将调用的url,我做了一个小功能来防止Typos并更好地使用Constants

所以我的客户看起来像这样:

public class Client() {
    public returnType function1 () {
        client.resource = ResourceClass.build(Constants.Resouce, "meaningfulPath");
        ...
        return response.getEntity(returnType);
    }

}

现在困扰我的问题是如何更好地链接客户端功能和服务器功能?

这两个代码块之间的唯一连接是将由客户端调用并由服务器映射的URL,即使该URL是在其他位置生成的,也会引起很多混乱.

当我的一位同事需要使用此代码时,他很难确定50个客户端功能中的哪个导致了服务器功能.而且很难确定代码中是否有过时的函数,等等.我想你们大多数人都比我更了解不洁代码的问题.

您如何处理?您将如何保持此代码的清洁,可维护和精巧?

解决方法:

通常,这将通过EJB或类似技术解决.

或至少通过“实际” Web服务,它将至少提供WSDL和架构(with kind of mapping to Java interfaces, or “ports”).

但是REST通信的类型和结构非常松散.

我现在唯一想到的是:定义一个项目(称为“定义”),该项目将被客户端和服务器引用(因此已知).在这个项目中,您可以定义一个包含大量公共静态最终String的类,例如:

public static final String SOME_METHOD_NAME = "/someMethodName";
public static final String SOME_OTHER_METHOD_NAME = "/someOtherMethodName";

注意:注释可以很好地引用静态最终String(在这种情况下,编译器将其视为常量).因此,请使用“常量”来注释您的@Path,例如:

@Path(Definitions.SOME_METHOD_NAME)

客户端相同:

ResourceClass.build(Constants.Resouce, Definitions.SOME_METHOD_NAME);
上一篇:java-泽西岛客户端API WebResource accept()无法正确设置MIME标头?


下一篇:java-Restful WebService的问题