MXS-1220: Add support for PATCH
The PATCH method should now be used instead the PUT method to update resources. As PUT request bodies should represent complete resources, the use of PUT to update resources is no longer supported. Altered tests to use PATCH instead of PUT for updating resources.
This commit is contained in:
@ -75,7 +75,7 @@ static inline size_t request_data_length(MHD_Connection *connection)
|
||||
static bool modifies_data(MHD_Connection *connection, string method)
|
||||
{
|
||||
return (method == MHD_HTTP_METHOD_POST || method == MHD_HTTP_METHOD_PUT ||
|
||||
method == MHD_HTTP_METHOD_DELETE) &&
|
||||
method == MHD_HTTP_METHOD_DELETE || method == MHD_HTTP_METHOD_PATCH) &&
|
||||
request_data_length(connection);
|
||||
}
|
||||
|
||||
|
||||
@ -677,11 +677,11 @@ public:
|
||||
m_post.push_back(SResource(new Resource(cb_modulecmd, 4, "maxscale", "modules", ":module", "?")));
|
||||
|
||||
/** Update resources */
|
||||
m_put.push_back(SResource(new Resource(cb_alter_server, 2, "servers", ":server")));
|
||||
m_put.push_back(SResource(new Resource(cb_alter_monitor, 2, "monitors", ":monitor")));
|
||||
m_put.push_back(SResource(new Resource(cb_alter_service, 2, "services", ":service")));
|
||||
m_put.push_back(SResource(new Resource(cb_alter_logs, 2, "maxscale", "logs")));
|
||||
m_put.push_back(SResource(new Resource(cb_alter_maxscale, 1, "maxscale")));
|
||||
m_patch.push_back(SResource(new Resource(cb_alter_server, 2, "servers", ":server")));
|
||||
m_patch.push_back(SResource(new Resource(cb_alter_monitor, 2, "monitors", ":monitor")));
|
||||
m_patch.push_back(SResource(new Resource(cb_alter_service, 2, "services", ":service")));
|
||||
m_patch.push_back(SResource(new Resource(cb_alter_logs, 2, "maxscale", "logs")));
|
||||
m_patch.push_back(SResource(new Resource(cb_alter_maxscale, 1, "maxscale")));
|
||||
|
||||
/** Change resource states */
|
||||
m_put.push_back(SResource(new Resource(cb_stop_monitor, 3, "monitors", ":monitor", "stop")));
|
||||
@ -774,6 +774,10 @@ public:
|
||||
{
|
||||
return process_request_type(m_put, request);
|
||||
}
|
||||
else if (request.get_verb() == MHD_HTTP_METHOD_PATCH)
|
||||
{
|
||||
return process_request_type(m_patch, request);
|
||||
}
|
||||
else if (request.get_verb() == MHD_HTTP_METHOD_POST)
|
||||
{
|
||||
return process_request_type(m_post, request);
|
||||
@ -810,6 +814,7 @@ private:
|
||||
ResourceList m_put; /**< PUT request handlers */
|
||||
ResourceList m_post; /**< POST request handlers */
|
||||
ResourceList m_delete; /**< DELETE request handlers */
|
||||
ResourceList m_patch; /**< PATCH request handlers */
|
||||
};
|
||||
|
||||
static RootResource resources; /**< Core resource set */
|
||||
@ -820,7 +825,8 @@ static bool request_modifies_data(const string& verb)
|
||||
{
|
||||
return verb == MHD_HTTP_METHOD_POST ||
|
||||
verb == MHD_HTTP_METHOD_PUT ||
|
||||
verb == MHD_HTTP_METHOD_DELETE;
|
||||
verb == MHD_HTTP_METHOD_DELETE ||
|
||||
verb == MHD_HTTP_METHOD_PATCH;
|
||||
}
|
||||
|
||||
static bool request_reads_data(const string& verb)
|
||||
|
||||
@ -6,7 +6,7 @@ function set_auth(auth, value) {
|
||||
.then(function(resp) {
|
||||
var d = JSON.parse(resp)
|
||||
d.data.attributes.parameters.admin_auth = value;
|
||||
return request.put(auth + host + "/maxscale", { json: d })
|
||||
return request.patch(auth + host + "/maxscale", { json: d })
|
||||
})
|
||||
.then(function() {
|
||||
return request.get(auth + host + "/maxscale")
|
||||
|
||||
@ -6,7 +6,7 @@ function set_value(key, value) {
|
||||
.then(function(resp) {
|
||||
var d = JSON.parse(resp)
|
||||
d.data.attributes.parameters[key] = value;
|
||||
return request.put(base_url + "/maxscale", { json: d })
|
||||
return request.patch(base_url + "/maxscale", { json: d })
|
||||
})
|
||||
.then(function() {
|
||||
return request.get(base_url + "/maxscale")
|
||||
|
||||
@ -7,7 +7,7 @@ describe("Errors", function()
|
||||
|
||||
it("error on invalid PUT request", function()
|
||||
{
|
||||
return request.put(base_url + "/servers/server1", { json: {this_is: "a test"}})
|
||||
return request.patch(base_url + "/servers/server1", { json: {this_is: "a test"}})
|
||||
.should.be.rejected
|
||||
})
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@ describe("HTTP Headers", function() {
|
||||
resp.headers.etag.should.be.equal("\"0\"")
|
||||
var srv = JSON.parse(resp.body)
|
||||
delete srv.data.relationships
|
||||
return request.put(base_url + "/servers/server1", {json: srv})
|
||||
return request.patch(base_url + "/servers/server1", {json: srv})
|
||||
})
|
||||
.then(function() {
|
||||
return request.get(base_url + "/servers/server1", {resolveWithFullResponse: true})
|
||||
@ -42,7 +42,7 @@ describe("HTTP Headers", function() {
|
||||
}
|
||||
}
|
||||
|
||||
request.put(base_url + "/servers/server1", {json: srv})
|
||||
request.patch(base_url + "/servers/server1", {json: srv})
|
||||
.then(function() {
|
||||
return request.get(base_url + "/servers/server1", {resolveWithFullResponse: true})
|
||||
})
|
||||
|
||||
@ -17,7 +17,7 @@ describe("Logs", function() {
|
||||
logs.data.attributes.parameters.throttling.suppress_ms = 1
|
||||
logs.data.attributes.parameters.throttling.window_ms = 1
|
||||
|
||||
return request.put(base_url + "/maxscale/logs", {json: logs})
|
||||
return request.patch(base_url + "/maxscale/logs", {json: logs})
|
||||
})
|
||||
.then(function(resp) {
|
||||
return request.get(base_url + "/maxscale/logs")
|
||||
|
||||
@ -27,7 +27,7 @@ describe("Monitor", function() {
|
||||
monitor.data.attributes.parameters = {
|
||||
monitor_interval: 1000
|
||||
}
|
||||
return request.put(base_url + "/monitors/" + monitor.data.id, {json:monitor})
|
||||
return request.patch(base_url + "/monitors/" + monitor.data.id, {json:monitor})
|
||||
.should.be.fulfilled
|
||||
});
|
||||
|
||||
@ -53,7 +53,7 @@ describe("Monitor Relationships", function() {
|
||||
.then(function(resp) {
|
||||
var mon = JSON.parse(resp)
|
||||
delete mon.data.relationships.servers
|
||||
return request.put(base_url + "/monitors/MySQL-Monitor", {json: mon})
|
||||
return request.patch(base_url + "/monitors/MySQL-Monitor", {json: mon})
|
||||
})
|
||||
.should.be.fulfilled
|
||||
});
|
||||
@ -69,7 +69,7 @@ describe("Monitor Relationships", function() {
|
||||
{id: "server3", type: "servers"},
|
||||
{id: "server4", type: "servers"},
|
||||
]
|
||||
return request.put(base_url + "/monitors/" + monitor.data.id, {json: mon})
|
||||
return request.patch(base_url + "/monitors/" + monitor.data.id, {json: mon})
|
||||
})
|
||||
.should.be.fulfilled
|
||||
});
|
||||
@ -80,7 +80,7 @@ describe("Monitor Relationships", function() {
|
||||
.then(function(resp) {
|
||||
var mon = JSON.parse(resp)
|
||||
delete mon.data.relationships.servers
|
||||
return request.put(base_url + "/monitors/" + monitor.data.id, {json: mon})
|
||||
return request.patch(base_url + "/monitors/" + monitor.data.id, {json: mon})
|
||||
})
|
||||
.then(function() {
|
||||
return request.get(base_url + "/monitors/MySQL-Monitor")
|
||||
@ -93,7 +93,7 @@ describe("Monitor Relationships", function() {
|
||||
{id: "server3", type: "servers"},
|
||||
{id: "server4", type: "servers"},
|
||||
]
|
||||
return request.put(base_url + "/monitors/MySQL-Monitor", {json: mon})
|
||||
return request.patch(base_url + "/monitors/MySQL-Monitor", {json: mon})
|
||||
})
|
||||
.should.be.fulfilled
|
||||
});
|
||||
|
||||
@ -38,7 +38,7 @@ describe("Server", function() {
|
||||
|
||||
it("update server", function() {
|
||||
server.data.attributes.parameters.weight = 10
|
||||
return request.put(base_url + "/servers/" + server.data.id, { json: server})
|
||||
return request.patch(base_url + "/servers/" + server.data.id, { json: server})
|
||||
.should.be.fulfilled
|
||||
});
|
||||
|
||||
@ -69,7 +69,7 @@ describe("Server Relationships", function() {
|
||||
|
||||
it("remove relationships", function() {
|
||||
delete rel_server.data["relationships"]
|
||||
return request.put(base_url + "/servers/" + rel_server.data.id, {json: rel_server})
|
||||
return request.patch(base_url + "/servers/" + rel_server.data.id, {json: rel_server})
|
||||
.should.be.fulfilled
|
||||
});
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@ describe("Service", function() {
|
||||
.then(function(resp) {
|
||||
var svc = JSON.parse(resp)
|
||||
svc.data.attributes.parameters.enable_root_user = true
|
||||
return request.put(base_url + "/services/RW-Split-Router", {json: svc})
|
||||
return request.patch(base_url + "/services/RW-Split-Router", {json: svc})
|
||||
})
|
||||
.then(function(resp) {
|
||||
return request.get(base_url + "/services/RW-Split-Router")
|
||||
@ -25,7 +25,7 @@ describe("Service", function() {
|
||||
.then(function(resp) {
|
||||
var svc = JSON.parse(resp)
|
||||
delete svc.data.relationships
|
||||
return request.put(base_url + "/services/RW-Split-Router", {json: svc})
|
||||
return request.patch(base_url + "/services/RW-Split-Router", {json: svc})
|
||||
})
|
||||
.then(function(resp) {
|
||||
return request.get(base_url + "/services/RW-Split-Router")
|
||||
@ -51,7 +51,7 @@ describe("Service", function() {
|
||||
}
|
||||
}
|
||||
|
||||
return request.put(base_url + "/services/RW-Split-Router", {json: svc})
|
||||
return request.patch(base_url + "/services/RW-Split-Router", {json: svc})
|
||||
})
|
||||
.then(function(resp) {
|
||||
return request.get(base_url + "/services/RW-Split-Router")
|
||||
|
||||
Reference in New Issue
Block a user