rest_json.js (1847B)
1 var util = require('../util'); 2 var Rest = require('./rest'); 3 var Json = require('./json'); 4 var JsonBuilder = require('../json/builder'); 5 var JsonParser = require('../json/parser'); 6 7 function populateBody(req) { 8 var builder = new JsonBuilder(); 9 var input = req.service.api.operations[req.operation].input; 10 11 if (input.payload) { 12 var params = {}; 13 var payloadShape = input.members[input.payload]; 14 params = req.params[input.payload]; 15 if (params === undefined) return; 16 17 if (payloadShape.type === 'structure') { 18 req.httpRequest.body = builder.build(params, payloadShape); 19 } else { // non-JSON payload 20 req.httpRequest.body = params; 21 } 22 } else { 23 req.httpRequest.body = builder.build(req.params, input); 24 } 25 } 26 27 function buildRequest(req) { 28 Rest.buildRequest(req); 29 30 // never send body payload on GET/HEAD/DELETE 31 if (['GET', 'HEAD', 'DELETE'].indexOf(req.httpRequest.method) < 0) { 32 populateBody(req); 33 } 34 } 35 36 function extractError(resp) { 37 Json.extractError(resp); 38 } 39 40 function extractData(resp) { 41 Rest.extractData(resp); 42 43 var req = resp.request; 44 var rules = req.service.api.operations[req.operation].output || {}; 45 if (rules.payload) { 46 var payloadMember = rules.members[rules.payload]; 47 var body = resp.httpResponse.body; 48 if (payloadMember.isStreaming) { 49 resp.data[rules.payload] = body; 50 } else if (payloadMember.type === 'structure' || payloadMember.type === 'list') { 51 var parser = new JsonParser(); 52 resp.data[rules.payload] = parser.parse(body, payloadMember); 53 } else { 54 resp.data[rules.payload] = body.toString(); 55 } 56 } else { 57 var data = resp.data; 58 Json.extractData(resp); 59 resp.data = util.merge(data, resp.data); 60 } 61 } 62 63 module.exports = { 64 buildRequest: buildRequest, 65 extractError: extractError, 66 extractData: extractData 67 };