vertx-web icon indicating copy to clipboard operation
vertx-web copied to clipboard

feat: Reject function for Web-Client

Open zekronium opened this issue 9 months ago • 0 comments

Describe the feature

Like HttpRequest.expect(), but inverted, for conditions that would fail the request if met, allowing to set general fail reasons. This should allow to have a more broad “allowed” request result by setting explicit reject() reasons, thus possibly making the code more readable and easier to understand

Can also be named refuse

Use cases

Implementation wise ResponsePredicate can be reused for this aswell for the reject handling Basic use

    client.getAbs(request)
      .as(BodyCodec.jsonObject())
      .expect(ResponsePredicate.SOME_STATUS)
      .reject(req -> req.headers.contains("bad header"))
      .send()
      .onFailure(v -> {
        System.out.println("I fail if i have `bad header`");
      })

Another behavior where specific status code ranges are accepected, opposed to setting multiple expect(), could be done with one reject()

In a scenario where SC_SUCCESS is fine, but TOO_MANY_REQUESTS would benefit from its own exception message

    client.getAbs(request)
      .as(BodyCodec.jsonObject())
      .expect(ResponsePredicate.SOME_STATUS)
      .reject(req -> req.status == 429, RatelimitException)
      .send()
      .onFailure(v -> {
        System.out.println("I fail if i have `bad header`");
      }).recover(ex -> {
        //more clear error message, isntead of relying on String parsing via ErrorConverter or other means
      });

Contribution

Can implement myself.

zekronium avatar Oct 24 '23 13:10 zekronium