Commit eae63571 authored by Dave Lawrence's avatar Dave Lawrence

Bug 966277 - Bugzilla native REST API should default to application/json if no…

Bug 966277 - Bugzilla native REST API should default to application/json if no Accept header was set r=dkl,a=justdave
parent c5464b5b
...@@ -251,11 +251,12 @@ use constant XMLRPC_CONTENT_TYPE_WHITELIST => qw( ...@@ -251,11 +251,12 @@ use constant XMLRPC_CONTENT_TYPE_WHITELIST => qw(
application/xml application/xml
); );
# The first content type specified is used as the default.
use constant REST_CONTENT_TYPE_WHITELIST => qw( use constant REST_CONTENT_TYPE_WHITELIST => qw(
text/html
application/javascript
application/json application/json
application/javascript
text/javascript text/javascript
text/html
); );
sub WS_DISPATCH { sub WS_DISPATCH {
......
...@@ -39,6 +39,8 @@ sub handle { ...@@ -39,6 +39,8 @@ sub handle {
# Determine how the data should be represented. We do this early so # Determine how the data should be represented. We do this early so
# errors will also be returned with the proper content type. # 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())); $self->content_type($self->_best_content_type(REST_CONTENT_TYPE_WHITELIST()));
# Using current path information, decide which class/method to # Using current path information, decide which class/method to
...@@ -440,6 +442,10 @@ sub _best_content_type { ...@@ -440,6 +442,10 @@ sub _best_content_type {
sub _simple_content_negotiation { sub _simple_content_negotiation {
my ($self, @types) = @_; my ($self, @types) = @_;
my @accept_types = $self->_get_content_prefs(); 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) }; my $score = sub { $self->_score_type(shift, @accept_types) };
return sort {$score->($b) <=> $score->($a)} @types; return sort {$score->($b) <=> $score->($a)} @types;
} }
...@@ -478,7 +484,7 @@ sub _get_content_prefs { ...@@ -478,7 +484,7 @@ sub _get_content_prefs {
# Sort the types by score, subscore by order, and pull out just the name # Sort the types by score, subscore by order, and pull out just the name
@prefs = map {$_->{name}} sort {$b->{score} <=> $a->{score} || @prefs = map {$_->{name}} sort {$b->{score} <=> $a->{score} ||
$a->{order} <=> $b->{order}} @prefs; $a->{order} <=> $b->{order}} @prefs;
return @prefs, '*/*'; # Allows allow for */* return @prefs;
} }
1; 1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment