Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [Vert.x] Organizzare le rotte in classi

    ciao!

    sto cercando di capire come organizzare al meglio le rotte in vert.x.
    non so se qualcuno di voi lo conosce.

    prendendo spunto da altri esempi, ho fatto così:
    codice:
    Router router = Router.router(vertx);
    router.route().handler(BodyHandler.create());
    router.get("/utenti").handler(UtentiController::index);
    router.post("/utenti/login").handler(UtentiController::login);
    e poi in UtentiController:
    codice:
    public class UtentiController {
    
      public static void index(RoutingContext routingContext) {
        HttpServerResponse response = routingContext.response();
        response.putHeader("content-type", "text/plain").end("Utenti");
      }
    
      public static void login(RoutingContext routingContext) {
        HttpServerResponse response = routingContext.response();
        if (!routingContext.body().isEmpty()) {
          JsonObject jsonObject = routingContext.body().asJsonObject();
    
          String username = jsonObject.getString("username");
          String password = jsonObject.getString("password");
    
          // ESEGUO QUERY
          if (username.equals("matteo") && password.equals("132456")) {
            JwtHelper jwtHelper = new JwtHelper();
    
            response
              .putHeader("content-type", "application/json")
              .end(JsonUtils.loginJson("ok", "Login effettuato!", jwtHelper.relaeseToken()));
          } else {
            response
              .setStatusCode(400)
              .putHeader("content-type", "application/json")
              .end(JsonUtils.genericJson("ko", "Credenziali errate!"));
          }
    
        } else {
          response
            .setStatusCode(400)
            .putHeader("content-type", "application/json")
            .end(JsonUtils.genericJson("ko", "Dati non presenti!"));
        }
      }
    }
    funziona tutto, ma non sono sicuro che sia il modo migliore.
    intanto per tutti quei metodi statici.
    e poi perchè volevo raggruppare le varie rotte in gruppi (come si fa in altri framework).

    qualcuno ha qualche suggerimento??

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,228
    Quote Originariamente inviata da fermat Visualizza il messaggio
    sto cercando di capire come organizzare al meglio le rotte in vert.x.
    non so se qualcuno di voi lo conosce.
    Ho iniziato a vederlo da poco, avendo preso il "Vert.x in Action" della Manning Publications. Ma non ho ancora avuto molto tempo di fare prove pratiche sostanziose.

    Quote Originariamente inviata da fermat Visualizza il messaggio
    funziona tutto, ma non sono sicuro che sia il modo migliore.
    intanto per tutti quei metodi statici.
    Sì esatto, i metodi statici sono proprio quelli che "stonano" di più. Partiamo da una considerazione, in Vert.x non c'è alcuna Dependency Injection "automatica". È tutto "puro" Java.
    L'altra considerazione è che in una classe di "controller" (come il tuo UtentiController) potrebbe essere necessario passare delle "dipendenze", magari in maniera astratta attraverso interface, anche per agevolare un eventuale unit-testing. In sostanza, quello che ha molto più senso è istanziare il controller (passandogli eventuali dipendenze) e poi fare riferimento a dei metodi "di istanza".

    Qualcosa che è assimilabile a questo abbozzato:
    codice:
    public class XyzController {
        private final DipendenzaA dipA;
    
        public XyzController(DipendenzaA dipA) {
            this.dipA = dipA;
        }
    
        public void getQualcosa(RoutingContext routingContext) {
            // .....
        }
    }

    Poi altrove:
    codice:
    DipendenzaA dipA = new DipendenzaAImpl();
    XyzController xyzCtrl = new XyzController(dipA);
    
    router.get("/qualcosa").handler(xyzCtrl::getQualcosa);
    Andrea • andbin.dev
    Senior Java developerSCJP 5 (91%) – SCWCD 5 (94%)

  3. #3
    ciao!!

    grazie per la risposta.
    penso di aver capito, domani mi ci metto e ti dico che viene fuori!

  4. #4
    allora, seguendo il tuo consiglio ho fatto così:
    codice:
    import com.zara.api.zara_api.utils.JsonUtils;
    import com.zara.api.zara_api.utils.JwtHelper;
    import io.vertx.core.http.HttpServerResponse;
    import io.vertx.core.json.JsonObject;
    import io.vertx.ext.web.RoutingContext;
    
    public class UtentiController {
    
      private final JwtHelper jwtHelper;
    
      public UtentiController(JwtHelper jwtHelper) {
        this.jwtHelper = jwtHelper;
      }
    
      public  void index(RoutingContext routingContext) {
        HttpServerResponse response = routingContext.response();
        response.putHeader("content-type", "text/plain").end("Utenti");
      }
    
      public  void login(RoutingContext routingContext) {
        HttpServerResponse response = routingContext.response();
        if (!routingContext.body().isEmpty()) {
          JsonObject jsonObject = routingContext.body().asJsonObject();
    
          String username = jsonObject.getString("username");
          String password = jsonObject.getString("password");
    
          // ESEGUO QUERY
          if (username.equals("matteo") && password.equals("132456")) {
            response
              .putHeader("content-type", "application/json")
              .end(JsonUtils.loginJson("ok", "Login effettuato!", jwtHelper.relaeseToken()));
          } else {
            response
              .setStatusCode(400)
              .putHeader("content-type", "application/json")
              .end(JsonUtils.genericJson("ko", "Credenziali errate!"));
          }
    
        } else {
          response
            .setStatusCode(400)
            .putHeader("content-type", "application/json")
            .end(JsonUtils.genericJson("ko", "Dati non presenti!"));
        }
      }
    }
    e poi nel routing:
    codice:
    JwtHelper jwtHelper = new JwtHelper();
    
    UtentiController utentiController = new UtentiController(jwtHelper);
    
    Router router = Router.router(vertx);
    router.route().handler(BodyHandler.create());
    router.get("/").handler(ctx -> {
    Utils utils = new Utils();
    HttpServerResponse response = ctx.response();
    response.putHeader("content-type", "text/plain");
    response.end(utils.getVersion());
    });
    router.get("/utenti").handler(utentiController::index);
    router.post("/utenti/login").handler(utentiController::login);
    sembra funzionare tutto.

    -------------

    poi volevo capire se c'è la possibilità di raggruppare le route.
    ho un pò cercato ma non ho trovato (probabilmente ho cercato male io).
    per intenderci, e fare un esempio concreto, in laravel (PHP) si fa una cosa così:
    codice:
    Route::group(["prefix" => "articoli", "middleware" => ["auth:sanctum"]], function () {
        Route::get('/', [ArticoliEcommerceController::class, 'index']);
        Route::get('/{id}', [ArticoliEcommerceController::class, 'getById']);
        Route::get('/brand/{id}', [ArticoliEcommerceController::class, 'getByBrand']);
    
        Route::post('/add', [ArticoliEcommerceController::class, 'add']);
        Route::post('/up_sconti', [ArticoliEcommerceController::class, 'upSconti']);
    });
    cosi ho "macro rotta" ha le sue rotte.

    non so, ma non ho trovato ancora nulla al riguardo.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,228
    Quote Originariamente inviata da fermat Visualizza il messaggio
    poi volevo capire se c'è la possibilità di raggruppare le route.
    ho un pò cercato ma non ho trovato (probabilmente ho cercato male io).
    È quasi sicuramente (verifica) quello che è descritto nella documentazione ufficiale in Sub-routers
    Andrea • andbin.dev
    Senior Java developerSCJP 5 (91%) – SCWCD 5 (94%)

  6. #6
    Quote Originariamente inviata da andbin Visualizza il messaggio
    È quasi sicuramente (verifica) quello che è descritto nella documentazione ufficiale in Sub-routers
    si penso anche io!
    non l'avevo notata quella voce!
    grazie gli do un'occhiata!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2022 vBulletin Solutions, Inc. All rights reserved.