githubot
githubot copied to clipboard
Support specifying properties on media type
In addition to the custom media type to specify API version, some methods support a (raw, full, etc): https://developer.github.com/v3/media/
It'd be useful to be able to specify these per-request. I'm not sure how the best way to do that would be, as currently, you can pass in data to get, but it's treated as a query string.
A workaround for now is to make a new github instance with a custom apiVersion like:
github = require('githubot')(robot, apiVersion: 'v3.raw')
You'd have to make other instances if you wanted a different property though.
Actually, that workaround doesn't work because it tries to JSON.parse the result, and it's just plain text coming back.
Indeed - I actually recently added a way to specify per-request options:
gh.withOptions(apiVersion: 'v3.raw').get "/foo"
But if we need to treat the response data as something other than JSON, we'd need a new option anyhow. I'm curious, do you have a specific use case in mind for this?
Yep, the Contents API https://developer.github.com/v3/repos/contents/ . At the very least, I think if the apiVersion matches /raw/ probably should not JSON.parse.
I can think of two ways to handle this:
- Check
apiVersionagainst a regexp and if it matches certain things, treat the responses different. If we went with this version, we'd need to differentiate betweenapiVersion: 'v3.raw'andapiVersion: 'v3.raw+json', and I think that would end up a little weird since we're in the habit of automatically adding the+jsonfor people. - Offer a new option, like
raw: trueormediaType: 'raw', that would both modify the header and parse the response appropriately. I'm leaning towards this one because it makes it a little more obvious.
I think being able to specify the entire media type would be most flexible. Then, don't try to parse the response unless it has json in it. Thoughts?
On April 23, 2014 at 2:22:17 AM EDT, Ian Young [email protected] wrote:I can think of two ways to handle this: Check apiVersion against a regexp and if it matches certain things, treat the responses different. If we went with this version, we'd need to differentiate between apiVersion: 'v3.raw' and apiVersion: 'v3.raw+json' , and I think that would end up a little weird since we're in the habit of automatically adding the +json for people. Offer a new option, like raw: true or mediaType: 'raw' , that would both modify the header and parse the response appropriately. I'm leaning towards this one because it makes it a little more obvious. —Reply to this email directly or view it on GitHub.
Yeah, I was debating that too and came to the same tentative conclusion. We can have a mediaType option with default value of "+json". Then someone can set it to "raw" for raw files, or "raw+json" or whatever for weird cases. Githubot will combine it with the apiVersion and add a dot when necessary, and can just match against /\+json$/ and parse only those responses.