如何使用Java读取和存储API调用/响应

时间:2019-07-08 20:50:27

标签: java api mocking

我正在尝试创建一个Java程序,该程序将允许用户在NoSQL数据库中记录和存储API调用和响应。基本上,我想接受呼叫名称,参数和响应,并将其存储在数据库中。这里的目的是让用户通过访问数据库中的数据来使用具有相同参数的调用,而不是进行实时API调用。有没有一种方法可以使用Java侦听特定URL上的API调用,如果可以,怎么办?

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解这样做的原因。但是,此问题的答案紧密取决于您要用于HTTP客户端的技术,请求/响应的类型以及您要使用的NoSQL数据库和策略。 作为建议,您可以创建两个数据类RequestDummyResponseDummy,其中包含您需要的所有必填字段,并使用类似gson的序列化或反序列化它们,并将它们存储为JSON文件。数据库以提高可读性。例如:

class RequestDummy {
    String url;
    String method;    // (GET|HEAD|POST|PUT|PATCH|DELETE)
    Map<String, String> headers;
    String payload;   // For (POST|PUT|PATCH) use Base64 to encode the binary to String
}

class ResponseDummy {
    Map<String, String> headers;
    int statusCode;
    String body;   // use Base64 to encode the binary to String
}

并在HTTP调用期间使用它们(简要说明一下想法):

// Initialize RequestDummy
RequestDummy req ...

HttpURLConnection con = (HttpURLConnection) new URL(req.url).openConnection();

// optional default is GET
con.setRequestMethod(req.method);
req.headers.entrySet().forEach(e -> con.setRequestProperty(e.getKey(), e.getValue()));

int responseCode = con.getResponseCode();

BufferedReader in = new BufferedReader(new InputStreamReader());
byte[] data = con.getInputStream().readAllBytes() // Java9

// Initialize ResponseDummy
RequestDummy req ...

in.close();

在99%的存储请求和响应中,这是一个糟糕的设计。作为建议,存储任何用途的HTTP请求和响应不是一个好主意。它们仅用于通信,您必须存储HTTP请求基于的请求数据以及HTTP响应生成的数据。