githubot icon indicating copy to clipboard operation
githubot copied to clipboard

Support specifying properties on media type

Open technicalpickles opened this issue 11 years ago • 6 comments
trafficstars

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.

technicalpickles avatar Apr 21 '14 22:04 technicalpickles

Actually, that workaround doesn't work because it tries to JSON.parse the result, and it's just plain text coming back.

technicalpickles avatar Apr 21 '14 22:04 technicalpickles

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?

iangreenleaf avatar Apr 22 '14 07:04 iangreenleaf

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.

technicalpickles avatar Apr 22 '14 14:04 technicalpickles

I can think of two ways to handle this:

  1. 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.
  2. 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.

iangreenleaf avatar Apr 23 '14 06:04 iangreenleaf

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.

technicalpickles avatar Apr 24 '14 13:04 technicalpickles

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.

iangreenleaf avatar Apr 24 '14 16:04 iangreenleaf