diff options
author | Dave Lawrence <dlawrence@mozilla.com> | 2014-02-05 22:37:07 +0000 |
---|---|---|
committer | Dave Lawrence <dlawrence@mozilla.com> | 2014-02-05 22:37:07 +0000 |
commit | eae63571ef63f7ddc9f36219229075a20c012d55 (patch) | |
tree | db2c9ffae90525ee006a779f6f1f4520c6b10246 /Bugzilla | |
parent | Bug 956233: enable USE_MEMCACHE on most objects (diff) | |
download | bugzilla-eae63571ef63f7ddc9f36219229075a20c012d55.tar.gz bugzilla-eae63571ef63f7ddc9f36219229075a20c012d55.tar.bz2 bugzilla-eae63571ef63f7ddc9f36219229075a20c012d55.zip |
Bug 966277 - Bugzilla native REST API should default to application/json if no Accept header was set
r=dkl,a=justdave
Diffstat (limited to 'Bugzilla')
-rw-r--r-- | Bugzilla/WebService/Constants.pm | 5 | ||||
-rw-r--r-- | Bugzilla/WebService/Server/REST.pm | 8 |
2 files changed, 10 insertions, 3 deletions
diff --git a/Bugzilla/WebService/Constants.pm b/Bugzilla/WebService/Constants.pm index 5d955b96a..4085c2cbd 100644 --- a/Bugzilla/WebService/Constants.pm +++ b/Bugzilla/WebService/Constants.pm @@ -251,11 +251,12 @@ use constant XMLRPC_CONTENT_TYPE_WHITELIST => qw( application/xml ); +# The first content type specified is used as the default. use constant REST_CONTENT_TYPE_WHITELIST => qw( - text/html - application/javascript application/json + application/javascript text/javascript + text/html ); sub WS_DISPATCH { diff --git a/Bugzilla/WebService/Server/REST.pm b/Bugzilla/WebService/Server/REST.pm index bafa84f88..f1e59873c 100644 --- a/Bugzilla/WebService/Server/REST.pm +++ b/Bugzilla/WebService/Server/REST.pm @@ -39,6 +39,8 @@ sub handle { # Determine how the data should be represented. We do this early so # errors will also be returned with the proper content type. + # If no accept header was sent or the content types specified were not + # matched, we default to the first type in the whitelist. $self->content_type($self->_best_content_type(REST_CONTENT_TYPE_WHITELIST())); # Using current path information, decide which class/method to @@ -440,6 +442,10 @@ sub _best_content_type { sub _simple_content_negotiation { my ($self, @types) = @_; my @accept_types = $self->_get_content_prefs(); + # Return the types as-is if no accept header sent, since sorting will be a no-op. + if (!@accept_types) { + return @types; + } my $score = sub { $self->_score_type(shift, @accept_types) }; return sort {$score->($b) <=> $score->($a)} @types; } @@ -478,7 +484,7 @@ sub _get_content_prefs { # Sort the types by score, subscore by order, and pull out just the name @prefs = map {$_->{name}} sort {$b->{score} <=> $a->{score} || $a->{order} <=> $b->{order}} @prefs; - return @prefs, '*/*'; # Allows allow for */* + return @prefs; } 1; |