簡體   English   中英

REST API客戶端實現,最佳實踐是什么?

[英]REST API client implementation, what is the best practice?

我正在開發一個 HTTP 客戶端 SDK,我在其中實現了橋接模式,架構如下所示:

在此處輸入圖像描述

這樣做的原因是我可以有多種類型的主體和 HTTP 方法來實現每種類型的消息,所以我相信這樣我會減少我要創建的類的數量。

我注意到並且困擾我很多的事情是在 SMS 請求部分我重復了很多 RestTemplate 代碼來發送提交示例:

    @Override
        public AdvancedSmsResponse postMessage() {
            super.httpHeaders.set("Authorization", super.authorization.toBase64());
            super.httpHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
            super.httpHeaders.setContentType(MediaType.APPLICATION_JSON);
            HttpEntity<Object> entity = new HttpEntity<>(smsAdvanced, httpHeaders);
            try{
                ResponseEntity<AdvancedSmsResponse> response = super.requestRestTemplate.exchange(getUrlHost(), HttpMethod.POST, entity, AdvancedSmsResponse.class);
                objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
                String smsResponseLog = objectMapper.writeValueAsString(response.getBody());
                super.LOGGER.info( "\n" + response.getStatusCode() + "\n" + smsResponseLog);
                return response.getBody();
            }catch (HttpStatusCodeException | JsonProcessingException e){
                return null;
            }
        }
    
        @Override
        public Object getDeliveryReport() {
    
            super.httpHeaders.set("Authorization", super.authorization.toBase64());
            super.httpHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
            super.httpHeaders.setContentType(MediaType.APPLICATION_JSON);
            HttpEntity<Object> entity = new HttpEntity<>(null, httpHeaders);
            try{
                ResponseEntity<AdvancedSmsResponse> response = super.requestRestTemplate.exchange(getUrlHost() + "/report", HttpMethod.GET, entity, AdvancedSmsResponse.class);
                objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
                String smsResponseLog = objectMapper.writeValueAsString(response.getBody());
                super.LOGGER.info( "\n" + response.getStatusCode() + "\n" + smsResponseLog);
                return response.getBody();
            }catch (HttpStatusCodeException | JsonProcessingException e){
                return null;
            }
        }

這個實現好不好? 還有一種方法可以避免請求執行部分的重復次數過多嗎?

我很想提取一個接受 HttpEntity、路徑和 HTTP 方法的方法。 但是,我還沒有看到您的全部請求。 如果您有少量不同的東西,那么這個簡單的提取可能足以避免重復代碼。 如果您有很多不同的東西,那么構建器可能是通往 go 的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM