]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 966277 - Bugzilla native REST API should default to application/json if no Accept...
authorDave Lawrence <dlawrence@mozilla.com>
Wed, 5 Feb 2014 22:37:07 +0000 (22:37 +0000)
committerDave Lawrence <dlawrence@mozilla.com>
Wed, 5 Feb 2014 22:37:07 +0000 (22:37 +0000)
r=dkl,a=justdave

Bugzilla/WebService/Constants.pm
Bugzilla/WebService/Server/REST.pm

index 5d955b96a74feb55398567528f80a73296bc01d3..4085c2cbd90bfa50f3a76f4cdd1a00660c894573 100644 (file)
@@ -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 {
index bafa84f88d51dd304ec6765f6092688a4a86b4fe..f1e59873cf1050b15c8f99b6c67cde6512d249a7 100644 (file)
@@ -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;