Skip to content

Instantly share code, notes, and snippets.

@scripting
Last active June 11, 2018 18:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save scripting/67fd46d35998a0beda354e638d563cbf to your computer and use it in GitHub Desktop.
Save scripting/67fd46d35998a0beda354e638d563cbf to your computer and use it in GitHub Desktop.
Egregious hack to add date and base64 types to JSON for XML-RPC
{
"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="
}
]
}
}
@scripting
Copy link
Author

BTW, here's the post that explains why I'm interested in this --

http://scripting.com/2018/06/10/152333.html

Dave

@richardtallent
Copy link

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.

@scripting
Copy link
Author

scripting commented Jun 11, 2018

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.

@scripting
Copy link
Author

scripting commented Jun 11, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment