gpt4 book ai didi

java - RESTful 应用程序 - 如何返回最后 10 个 REST 调用

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

我正在开发一个 RESTful 应用程序。应用程序任务之一是返回对应用程序进行的最后 10 个面向业务的 REST 调用以及请求信息和时间。这样做的最佳方法是什么?我读到了有关拦截器和过滤器的内容。但我不确定这是否是个好主意...还有其他想法或信息如何实现这个吗?

编辑:我用了执行器。在您回复后我的解决方案:

@Service
public class ActuatorTraceService {

private JsonParser jsonParser = new JsonParser();
private List<String> listWithInformationFromTrace = new ArrayList<>();
private JSONArray jsonArrayFromString;
private JSONArray listWithoutRequestAndTracePath;

public void takeInformationFromActuatorTrace() {
jsonArrayFromString = new JSONArray("[{}]");
String urlAddressForTrace = "http://localhost:8080/trace";
jsonArrayFromString = new JSONArray(jsonParser.takeJsonAsAStringFromUrl(urlAddressForTrace));
}

public String createPathForCheck(int i) {
String pathForCheck = jsonArrayFromString
.getJSONObject(i)
.getJSONObject("info")
.get("path")
.toString();
return pathForCheck;
}

public void createListWithoutRequestAndTracePath() {
listWithInformationFromTrace.clear();
takeInformationFromActuatorTrace();
listWithoutRequestAndTracePath = new JSONArray();

for (int i = 0; i < jsonArrayFromString.length(); i++) {
if (!createPathForCheck(i).equals("/request") &&
!createPathForCheck(i).equals("/trace")) {
listWithoutRequestAndTracePath.put(jsonArrayFromString.get(i));
}
}
}

public List<String> createListWithInformationsFromTrace(){
createListWithoutRequestAndTracePath();

for (int i=0; i<listWithoutRequestAndTracePath.length(); i++){
String timestampAndRequestInformation = takeTimestampFromTrace(i) + "\n" + takeRequestInformationFromTrace(i) + "\n";
listWithInformationFromTrace.add(timestampAndRequestInformation);
}
return listWithInformationFromTrace;
}

public String takeRequestInformationFromTrace(int i) {
return listWithoutRequestAndTracePath
.getJSONObject(i)
.getJSONObject("info")
.getJSONObject("headers")
.get("request")
.toString()
+ "\n";
}

public String takeTimestampFromTrace(int i) {
return jsonArrayFromString.getJSONObject(i).get("timestamp").toString() + "\n";
}

public String printLastTenRequestInformationFromTrace() {
StringBuilder stringToPrint = new StringBuilder();
createListWithInformationsFromTrace();

if (listWithInformationFromTrace.size() > 10) {
for (int i = 0; i < StaticValues.NUMBER_POSITION_TO_PRINT; i++) {
stringToPrint.append(listWithInformationFromTrace.get(i));
}
} else {
for (int i = 0; i < listWithInformationFromTrace.size(); i++) {
stringToPrint.append(listWithInformationFromTrace.get(i));
}
}

return stringToPrint.toString();
}
}

可能它可能会更具可读性,并且最后应该实现 pretty-print ,但目前它可以工作。

最佳答案

有很多方法可以做到这一点。如果您需要持久信息(服务器重新启动后应使用所有历史信息),请将其存储在:

1)为剩余请求信息创建单独的表并使用该表

2) 使用Logstash here is example

3)使用一些内存数据库来存储其余调用信息

使用哪一个取决于您的要求,我更喜欢 Logstash,因为您不仅可以将它用于特定的休息调用,还可以将其重用于日志逻辑的其他部分。

只是另一个变体如果您不想保留所有历史信息并且可以在服务器重新启动后使用新信息,您可以将其保留在内存中(如果您有足够的内存),您可以在本地集合中进行存储,但它是糟糕的变体 - 你应该保留大量冗余信息,然后进行一些排序以找到前 10 个。这不是推荐,这只是可能的变体,非常糟糕的变体。

要获取有关休息通话的信息​​,您可以:使用 Interceptors ,过滤器,Logging aspect in RESTful web service using spring aop (log requests/responses) AOP。

关于java - RESTful 应用程序 - 如何返回最后 10 个 REST 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45119290/

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