I’m working on a two-way bridge between an external API and Skuid by using a REST model. I’m able to successfully ‘GET’ data, however 'PUT’ing data back to an endpoint from the same API doesn’t work.
I am able to issue a working PUT from Postman with the same basic Authentication I’m using through Skuid. The HTTP request as generated by Postman looks like this (sensitive info redacted with x’s):
PUT /rest/v1/subscriptions/xxxxxxxxxxxxxx HTTP/1.1Host: api.host.com
Content-Type: application/json
Authorization: Basic xxxxxxxxxxxx
Cache-Control: no-cache
Postman-Token: 1dc95f2a-d0cb-7203-2d65-fe2f75176cd3
{
"notes": "New Note"
}
RESPONSE
{
"success": true,
"subscriptionId": "xxxxxxxxxxxxxxxxxxxxxxx",
"totalDeltaMrr": 0,
"totalDeltaTcv": 0
}
What I’m able to get skuid to send looks like this:
POST /apexremote HTTP/1.1
Host: skuid.cs28.visual.force.com
Connection: keep-alive Content-Length: 708 X-User-Agent: Visualforce-Remoting Origin: -https://skuid.cs28.visual.force.com](https://skuid.cs28.visual.force.com "Link https//skuidcs28visualforcecom") X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10\_10\_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Content-Type: application/json Accept: \*/\*
Referer: \https://skuid.cs28.visual.force.com/apex/skuid\_\_ui?page=Test](https://skuid.cs28.visual.force.com/apex/skuid__ui?page=Test "Link https//skuidcs28visualforcecom/apex/skuid\_\_uipageZuora\_Test") Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.8 Cookie: \_mkto\_trk=id:164-HZR-790&token:\_mch-force.com-1465830914701-52191; BrowserId=jsOTxP84TI-j4z2Ob1VX-Q; sid=00D230000000REh!AQwAQAQpvz00CRgygDBNdWN\_Er0VQKjEVXCyfcjsLCSXX7drIAZtMshI5hZCBFzgsRg8h4cYAm1i4QfcxON48DtpRC\_7vuyY; sid\_Client=3000000YIvE30000000REh; clientSrc=99.255.169.115; inst=APP\_23
{"action":"skuid.RemotingStubs","method":"proxy","data":d"{""url"":""ahttps://api.host.com/rest/v1/subscriptions/2c92c086567df81d015693184d611df3"",&quo...](https://api.host.com/rest/v1/subscriptions/2c92c086567df81d015693184d611df3 "Link https//apisandbox-apizuoracom/rest/v1/subscriptions/2c92c086567df81d015693184d611df3headersUser-AgentMozilla/50") (Macintosh; Intel Mac OS X 10\_10\_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"",""Content-Type"":""application/json""},""method"":""PUT"",""modelService"":""Subscription"",""contentType"":""application/json"",""body"":""{\""notes\"":\""Test NEW subscription from z-ruby-sdksadas\""}""}"],"type":"rpc","tid":4,"ctx":{"csrf":"VmpFPSxNakF4Tmkwd09DMHlNRlF4TmpvMU56b3lPUzQxTkRCYSw5TW4wS2h6TVhWQjk2SGlzVzhGNVRJLFpHUTJOR0l4","vid":"066230000004PzC","ns":"skuid","ver":36}}
RESPONSE
< {
"statusCode":200,
"type":"rpc",
"tid":4,
"ref":false,
"action":"skuid.RemotingStubs",
"method":"proxy",
"result":"{""statusCode"":200,""status"":""OK"",""setCookies"":null,""headers"":{""Content-Type"":""application/json;charset=utf-8"",""Date"":""Wed, 17 Aug 2016 16:59:40 GMT"",""Content-Length"":""184"",""Expires"":""Wed, 17 Aug 2016 16:59:40 GMT"",""Pragma"":""no-cache"",""Connection"":""keep-alive"",""Server"":""xxxxxxxxxxxxx"",""Cache-Control"":""max-age=0, no-cache, no-store""},""error"":null,""body"":""{\n \""success\"" : false,\n \""processId\"" : \""xxxxxxxxxxxxxxx\"",\n \""reasons\"" : {\n \""code\"" : 50000000,\n \""message\"" : \""Cannot extract parameter (Map body): no Content-Type found\""\n } ]\n}""}"
}
]
Now, I’m aware that Skuid sends this off to an Apex class that in turn submits the request. And it would seem that the body/payload it sends off isn’t understood by the API. The response claims there is no ‘Content-Type’ found, which could be a cause of this, or the JSON could be malformed.
My Skuid model’s update looks like this:
Has anyone had any issues with malformed JSON PUT payloads from a REST model?