gpt4 book ai didi

java - API设计建议

转载 作者:行者123 更新时间:2023-12-02 10:48:36 25 4
gpt4 key购买 nike

我正在为服务器开发一个 API(库)(想象一个简单的服务器,它接收请求并在连接上写回响应)。

我有一种情况,我有 3 个不同的框架(第三方库)。所有这些都提供了一种处理请求的方法,但是以它们自己的方式。想象一下以下是每个库的接口(interface):

库A

public class AHandler implements AHandler {

public Response handle(Request req){
// ..
}
}

库B

public class BHandler extends SomeHandler {

public BResponse handle(BRequest req){
// ..
}
}

lib C

@Handler
public class BHandler {
@HandlerMethod
public void handle(CRequest req, CResponse res){
// ..
}
}

我想创建一个 API 来抽象 handle()方法转化为某种统一的方法。由于A、B和C是第三方的,我没有办法修改它们。

事实:

  • 用户可以在每台服务器上拥有一个或多个此类处理程序;
  • 我无法修改第三方库的源代码,也不想控制它们的版本。

为所有三个库提供统一接口(interface)的 API 设计的最佳方法是什么?

最佳答案

您可以结合使用外观适配器来实现所需的结果。

// defines the uniform interface exposed to API clients
interface Facade {
void handleRequest(Request request, Response response)
}

// defines the uniform interface each handler will have to expose
interface Adapter {
void handleRequest(Request request, Response response)
}

// takes a concrete adapter as argument and delegates to it for the concrete handle logic implementation
class ConcreteFacade implements Facade{

private Adapter adapter;

public ConcreteFacade(Adapter adapter){
this.adapter = adapter;
}

public void handleRequest(Request request, Response response){
adaper.handleRequest(request, response);
}

}

// one concrete adapter for each library
class ConcreteAdapter implements Adapter {

private AHandler handler;

public ConcreteAdapter(AHandler handler){
this.handler = handler;
}

public void handleRequest(Request request, Response response) {
//delegate to handler
}

}

关于java - API设计建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52360332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com