有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用身份验证令牌的java设计模式?

我是一名客户端开发人员,正在转向服务器端开发。 我遇到的一个常见问题是需要进行一次API调用(比如获取身份验证令牌),然后进行后续API调用以获取所需的数据。有时,我需要连续对数据进行两次API调用,但也没有身份验证令牌

是否有一个通用的设计模式或Java库来解决这个问题?或者每次需要手动创建调用字符串时,是否需要手动创建调用字符串

编辑:我希望看到这样的东西

CustomClassBasedOnJson myStuff = callAPI("url", getResponse("authURL"));

这将使用从“authURL”接收的数据调用“url”。 这里的要点是,我正在串接多个url调用,使用一个调用的结果定义下一个调用


共 (1) 个答案

  1. # 1 楼答案

    在进行服务器端编程时,可以同步调用HTTP调用

    因此,正确的模式是简单地进行第一次调用,接收结果,然后在下一行中使用该结果。除非在http调用之间发生重大处理,否则无需将调用分离为单独的线程或异步调用

    例如:

     JsonResponseEntry getJsonReportResponse() throws IOException {
             String sReportURL = "https://someurl.com/v2/report/report?" +
                     "startts=" + getDateYesterday("ts") +
                     "&endts=" + getDateNow("ts") +
                     "&auth=" + getAuthCode();
    
             URL reportURL = new URL(sReportURL);
             URLConnection conn = reportURL.openConnection();
             BufferedReader buf = new BufferedReader(new InputStreamReader(conn.getInputStream()));
             ObjectMapper mapper = new ObjectMapper();
            JsonNode reportResult = mapper.readTree(buf);
             return convertJSonNodeToJsonResponseEntry(reportResult);
        }
    
        String getAuthCode() throws IOException {
            String sReportURL = "https://someurl.com/auth";
            URL reportURL = new URL(sReportURL);
    
            HttpURLConnection conn = (HttpURLConnection) reportURL.openConnection();
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.connect();
    
            String urlParameters = "username=myUserName&password=mypassword";
            DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
            wr.writeBytes(urlParameters);
            wr.flush();
            wr.close();
            BufferedReader buf = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            ObjectMapper mapper = new ObjectMapper();
            AuthResponse response = mapper.readValue(buf, AuthResponse.class);
            return response.toString();
        }
    

    函数getAuthCode()在需要响应的URL调用中被同步调用