-
-
Save scripting/67fd46d35998a0beda354e638d563cbf to your computer and use it in GitHub Desktop.
{ | |
"methodCall": { | |
"methodName": "examples.echoParams", | |
"params": [ | |
"#dateTime=2018-06-10T19:41:06.199Z", | |
"#base64=aGVsbG8gd29ybGQ=" | |
] | |
} | |
} |
{ | |
"methodCall": { | |
"methodName": "examples.echoParams", | |
"params": [ | |
{ | |
"#type": "dateTime", | |
"#value": "2018-06-10T19:41:06.199Z" | |
}, | |
{ | |
"#type": "base64", | |
"#value": "aGVsbG8gd29ybGQ=" | |
} | |
] | |
} | |
} |
Don’t make consumers look inside the value to determine the type. Pass an object with explicit type and value keys. Or even an object with a single key, the type, ie:
params: [
{ serialized: true, dateTime: “...” }
{ serialized: true, base64: “...” },
// probably better to do this:
{ serialized: true, encoding: “iso8601”, value: “2018...” },
{ serialized: true, encoding: “base64”, value: “...” }
]
Typing on my phone, apologies for formatting. Basically pass an object that the consumer can quickly identify as a serialized string so it can pass it to the appropriate code to deserialize it.
With this approach, you decouple the recognition of special value types from the deserialization, avoid making the deserializers parse your prefix, and the idea is extensible to any type that doesn’t have an intrinsic format in JSON.
Richard, the consumers wouldn't have to look inside the value to get the type, because that would be handled by the toolkit, as it is in XML-RPC's XML serialization.
JSON doesn't have a way of representing dates and binary info, but JavaScript does.
Another example based on a similar idea.
https://gist.github.com/scripting/67fd46d35998a0beda354e638d563cbf#file-rpccall2-json
Dave
BTW, here's the post that explains why I'm interested in this --
http://scripting.com/2018/06/10/152333.html
Dave