ItsPronounced
ItsPronounced

Reputation: 5463

Rest API Patch only 1 field at a time

I'm working on an inline grid editor that calls an express rest api after a single value in the grid is updated. So when a user changes a single field in the grid, I am calling a PATCH request to update the field. However I can't figure out how to only update a single field. When I try it tries to update them all and if there's no value it makes the value NULL in the database. I want to only update a single field, and only the one passed into the API (it could be any of the fields). Here's my method to patch:

// Update record based on TxnID
router.patch('/editablerecords/update', function (req, res) {
    let qb_TxnID = req.body.txnid
    let type = req.body.type;
    let margin = req.body.margin;



    if (!qb_TxnID) {
        return res.status(400).send({ error:true, message: 'Please provide TxnID' });
    }

    connection.query("UPDATE pxeQuoteToClose SET ? WHERE qb_TxnID = '" + qb_TxnID + "'", { type, margin  }, function (error, results, fields) {
        if(error){
            res.send(JSON.stringify({"status": 500, "error": error, "response": null })); 
            //If there is error, we send the error in the error section with 500 status
        } else {
            res.send(JSON.stringify({ error: false, data: results, message: 'Record updated.' }));
            //If there is no error, all is good and response is 200OK.
        }
    });
});

I will only be updating 1 field at a time, either type or margin, but not both (in this case) at the same time. If I only send one of the fields, the other field becomes null. I've tried to read up on the connection.query() method but can find no information and I don't understand how it builds the query, except that every req.body.value that is passed to it gets used to build the query.

I'm new to building this REST API and feel like I'm missing something simple.

EDIT: I'd like to add, I MAY want to update both fields, but I'd also like to update a single field at a time. Thanks

Upvotes: 1

Views: 2491

Answers (1)

Eric Stein
Eric Stein

Reputation: 13682

Per the RFC, the body of a PATCH call should not be the updated representation, but rather a set of instructions to apply to the resource.

The PATCH method requests that a set of changes described in the request entity be applied to the resource identified by the Request- URI. The set of changes is represented in a format called a "patch document" identified by a media type.

One good proposed standard for using PATCH with JSON can be found at https://www.rfc-editor.org/rfc/rfc6902. An example patch document using that standard would be:

   [
     { "op": "test", "path": "/a/b/c", "value": "foo" },
     { "op": "remove", "path": "/a/b/c" },
     { "op": "add", "path": "/a/b/c", "value": [ "foo", "bar" ] },
     { "op": "replace", "path": "/a/b/c", "value": 42 },
     { "op": "move", "from": "/a/b/c", "path": "/a/b/d" },
     { "op": "copy", "from": "/a/b/d", "path": "/a/b/e" }
   ]

Upvotes: 1

Related Questions