es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Patrón de diseño de Java: Evitar la duplicación de código para llamadas a la API de Azure Rest.

He escrito un pequeño programa en Java que realizará una llamada REST y funciona bien como se esperaba. Ahora, tengo que escribir un programa similar para otras llamadas a la API. ¿Cómo estructuro el código para evitar duplicar el código?

“`java
System.out.println("Detalles de uso!");

AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);
TokenCredential credential = new DefaultAzureCredentialBuilder()<br />
.authorityHost(profile.getEnvironment()
.getActiveDirectoryEndpoint())
.build();
ConsumptionManager consumptionManager = ConsumptionManager.authenticate(credential, profile);

// los siguientes detalles cambian para diferentes API
PagedIterable<usagedetail> usageDetailList = consumptionManager.usageDetails()
.list("url", <argumento1>, <argumento2>, null, null, Metrictype.USAGE, Context.NONE);
int count = 1;

for (UsageDetail usageDetail : usageDetailList) {
LegacyUsageDetail legacyUsageDetail = (LegacyUsageDetail)usageDetail.innerModel();
try {
//if(legacyUsageDetail.date().toString().equals("2021-09-22T00:00Z") &&
legacyUsageDetail.resourceGroup().startsWith("F2BDEVC-ms")){
if (count == 1) {
System.out.println("Nombre de suscripción: " +
legacyUsageDetail.subscriptionName());
}}
} catch (Exception e) {}
}
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para estructurar el código de manera que se evite duplicar el código, puedes seguir los principios de reutilización de código y modularidad. Una forma de lograr esto es creando una función separada para realizar la llamada REST, que tome los parámetros específicos de la API como argumentos de entrada y devuelva la respuesta.

    Por ejemplo, puedes crear una función llamada makeRestCall que tome la URL y los argumentos como entrada y devuelva la respuesta:

    public String makeRestCall(String url, String arg1, String arg2) {
        AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);
        TokenCredential credential = new DefaultAzureCredentialBuilder()           
               .authorityHost(profile.getEnvironment()
                                     .getActiveDirectoryEndpoint())
               .build();
        ConsumptionManager consumptionManager = ConsumptionManager.authenticate(credential, profile);
    
        PagedIterable<usagedetail> usageDetailList = consumptionManager.usageDetails()
                .list(url, arg1, arg2, null, null, Metrictype.USAGE, Context.NONE);
    
        // Procesa la respuesta y devuélvela como una cadena
        // ...
    }
    

    Luego, en tu programa principal, puedes llamar a esta función con diferentes parámetros para realizar diferentes llamadas REST, sin duplicar el código:

    System.out.println("Detalles de uso!");
    
    // Realiza la primera llamada REST
    String response1 = makeRestCall("url1", "arg11", "arg12");
    
    // Realiza la segunda llamada REST
    String response2 = makeRestCall("url2", "arg21", "arg22");
    
    // ...
    

    Siguiendo este enfoque, puedes asegurarte de que tu código sea reutilizable, modular y fácil de mantener. También puedes considerar el uso de patrones de diseño como el patrón de Método de Plantilla o el patrón Factory para mejorar aún más la reutilización y mantenibilidad del código.

Comments are closed.