-
Notifications
You must be signed in to change notification settings - Fork 9.4k
Add missing REST methods to Curl Client (SwiftOtter's SOP-348) #39330
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
Add missing REST methods to Curl Client (SwiftOtter's SOP-348) #39330
Conversation
Hi @lbajsarowicz. Thank you for your contribution!
Allowed build names are:
You can find more information about the builds here For more details, review the Code Contributions documentation. |
@magento run all tests |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I added a few comments with possible improvements. Also, I think you forgot to add CONNECT
method.
* @param string $uri | ||
* @return void | ||
*/ | ||
public function delete($uri) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
According to HTTP documentation, DELETE request can include optional payload.
* @param string $uri | ||
* @return void | ||
*/ | ||
public function options($uri) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
According to HTTP documentation, OPTIONS request can include optional payload.
* @param string $uri | ||
* @return void | ||
*/ | ||
public function head($uri) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
According to HTTP documentation, HEAD request can include optional payload.
@ihor-sviziev or @bgorski Can I ask you for Code Review in this specific case? |
@magento create issue |
@magento run all tests |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hello @lbajsarowicz,
Thanks for the contribution!
It seems this PR has been already reviewed by @michalbiarda. We request you to please address them and also please fix the failed automated tests.
Thanks
@magento run all tests |
@michalbiarda @engcom-Hotel: I have added an optional payload for the DELETE, OPTIONS, and HEAD methods. Additionally, I added the CONNECT method. Please review it. Thanks. cc: @lbajsarowicz |
@magento run all tests |
@magento run Functional Tests B2B, Functional Tests CE |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
declare(strict_types=1); | ||
|
||
namespace Magento\TestFramework\Helper; | ||
|
||
use Magento\Framework\HTTP\Client\Curl; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In line no. 53:
$this->curl = new Curl();
I suggest you add the parameter $curl
as null
and use ObjectManager
to initialize it. Please refer to the $this->deploymentConfig
@@ -1,30 +0,0 @@ | |||
<?php |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is not recommended to delete the existing file, as other third-party extensions might use it. Instead, mark it as deprecated
.
Thanks
* @param array|string $params | ||
* @return void | ||
*/ | ||
public function head(string $uri, array|string $params = []) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I did not introduce a payload here because according to RFC9110
The HEAD method is identical to GET except that the server MUST NOT send content in the response.
https://www.rfc-editor.org/rfc/rfc9110.html#section-9.3.2
You're absolutely correct that the RFC you linked doesn't explicitly forbid a payload for HEAD requests. However, it strongly discourages it and hints at the reasons why it's generally not used:
Semantic Ambiguity:
-
HEAD is for metadata: The core purpose of HEAD is to fetch metadata about a resource without retrieving the actual data. A payload in this context has no clearly defined meaning. What should the server do with the provided data? Unlike POST (create/update) or PUT (replace), HEAD doesn't have an inherent action associated with a payload.
-
Potential for Confusion: Including a payload with HEAD could lead to confusion and unpredictable behavior, as servers might interpret it in different ways. This ambiguity undermines the standardization that HTTP strives for.
Why GET can have a payload (though discouraged):
While GET requests can technically have a payload, it's generally discouraged for similar reasons to HEAD. The RFC states that a payload in a GET request "has no semantic meaning to the request." This means the server is free to ignore it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hello @lbajsarowicz,
Thanks for the detailed explanation.
FYI, as mentioned in #39330 (review), I have added an optional payload for the DELETE, OPTIONS, and HEAD methods. Additionally, I have added the CONNECT method with an optional payload. If possible, could you please revert these changes, or let me know which methods, including HEAD, do not require an optional payload? Your input would be greatly appreciated.
Thanks again!
Regarding CONNECT
|
@magento run all tests |
Hi @lbajsarowicz, Thank you for your contribution! We are currently in discussions with the Product Owner regarding this PR, as the issue has been tagged as a feature request in #39341 (comment). Once we receive input, we will review it. In the meantime, we are moving it to "On Hold." Thank you! |
Hello @lbajsarowicz, We have received a response from the PO, indicating that this class is used in many extensions, and the changes provided in the pull request are backward incompatible, which is considered a breaking change. This could disrupt extensions. Given these implications, it seems best not to proceed with this PR. However, we sincerely appreciate your valuable contributions. Thanks |
@engcom-Dash are you able to provide more information what is considered as backwards-incompatible? |
@engcom-Dash these changes are backwards-compatible |
I disagree with your decision and - as a response to it - I created two separate PRs to address the complain about backwards compatibility. See referenced PRs. |
Description (*)
There are 9 methods in the HTTP protocol (https://en.wikipedia.org/wiki/HTTP).
Magento implements just 2 of them, so when you need to make requests to remote environments using Framework HTTP Client, you end up with HTTP 411 error.
This Pull Request adds missing methods with their payload support:
Related Pull Requests
Fixed Issues (if relevant)
Manual testing scenarios (*)
Questions or comments
Contribution checklist (*)
Resolved issues: