Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HttpQuery: Allow using http method DELETE. #294

Merged
merged 3 commits into from
Jan 3, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.*;
import java.util.function.Consumer;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
Expand Down Expand Up @@ -357,23 +358,31 @@ private String getURL (Context ctx) {
}

private HttpRequestBase getHttpRequest(Context ctx) {
Consumer<HttpEntityEnclosingRequestBase> setBody = (HttpEntityEnclosingRequestBase request) -> {
String payload = ctx.getString(requestName);
if (payload != null) {
request.setEntity(new StringEntity(payload, getContentType(ctx)));
}
};
String url = getURL(ctx);
String payload;
switch (ctx.getString(methodName)) {
case "POST":
HttpPost post = new HttpPost(url);
payload = ctx.getString(requestName);
if (payload != null)
post.setEntity(new StringEntity(payload, getContentType(ctx)));
setBody.accept(post);
return post;
case "PUT":
HttpPut put = new HttpPut(url);
payload = ctx.getString(requestName);
if (payload != null)
put.setEntity(new StringEntity(payload, getContentType(ctx)));
setBody.accept(put);
return put;
case "GET":
return new HttpGet(url);
case "DELETE":
return new HttpDelete(url);
Comment on lines +380 to +381
Copy link
Contributor

@alcarraz alcarraz Jan 2, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not adding PATCH since we are at it?

Suggested change
case "DELETE":
return new HttpDelete(url);
case "DELETE":
return new HttpDelete(url);
case "PATCH":
HttpPatch patch = new HttpPatch(url);
payload = ctx.getString(requestName);
if (payload != null)
put.setEntity(new StringEntity(payload, getContentType(ctx)));
return patch;

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn’t PATCH need a request entity body? (Like PUTor POST)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right, maybe that could be refactored since the setting of the payload is the same for three cases (all except two in fact), maybe that could go in an if? Or a helper method or a lambda that sets the payload. It could go something like this:

In the switch case create the request, or just call a factory method that receives the method name and the url and returns the instance.
Set the body if it's not GET.
Return.

Or with the lambda could be something like:

    Consumer<HttpEntityEnclosingRequestBase> setBody = (HttpEntityEnclosingRequestBase request) -> {
        String payload = ctx.getString(requestName);
        if (payload != null) {
            request.setEntity(new StringEntity(payload, getContentType(ctx)));
        }
    }

    private HttpRequestBase getHttpRequest(Context ctx) {
        String url = getURL(ctx);
        String payload;
        switch (ctx.getString(methodName)) {
            case "POST":
                HttpPost post = new HttpPost(url);
                setEntity.accept(post);
                return post;
            case "PUT":
                HttpPut put = new HttpPut(url);
                setEntity.accept(put);
                return put;
            case "GET":
                return new HttpGet(url);
            case "DELETE":
                return new HttpDelete(url);
            case "PATCH":
                HttpPatch patch = new HttpPatch(url);
                setEntity.accept(patch);
                return patch;

I'm not saying the refactoring should be done, and I'm aware I'm off-topic here :) .

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FYI: I updated the suggestion.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Or just let the switch/case fall through with a little refactoring and comment

case "PATCH":
HttpPatch patch = new HttpPatch(url);
setBody.accept(patch);
return patch;
}
ctx.log ("Invalid request method");
return null;
Expand Down
Loading