reject API calls with unsupported parameters
authorTom Clegg <tom@clinicalfuture.com>
Tue, 4 Jun 2013 16:41:14 +0000 (12:41 -0400)
committerTom Clegg <tom@clinicalfuture.com>
Tue, 4 Jun 2013 16:41:14 +0000 (12:41 -0400)
sdk/perl/lib/Arvados/ResourceMethod.pm

index eecc041c65f5fbbf69cb0c8f5eabdc8fe4959b2e..52334d7fe2f8e735d62c0982bb11e58048446169 100644 (file)
@@ -27,7 +27,9 @@ sub execute
 
     my %body_params;
     my %given_params = @_;
 
     my %body_params;
     my %given_params = @_;
+    my %extra_params = %given_params;
     while (my ($param_name, $param) = each %{$method->{'parameters'}}) {
     while (my ($param_name, $param) = each %{$method->{'parameters'}}) {
+        delete $extra_params{$param_name};
         if ($param->{'required'} && !exists $given_params{$param_name}) {
             croak("Required parameter not supplied: $param_name");
         }
         if ($param->{'required'} && !exists $given_params{$param_name}) {
             croak("Required parameter not supplied: $param_name");
         }
@@ -74,6 +76,9 @@ sub execute
             $body_params{$param_name} = $given_params{$param_name};
         }
     }
             $body_params{$param_name} = $given_params{$param_name};
         }
     }
+    if (%extra_params) {
+        croak("Unsupported parameter(s) passed to API call /$path: \"" . join('", "', keys %extra_params) . '"');
+    }
     my $r = $self->{'resourceAccessor'}->{'api'}->new_request;
     $r->set_uri($self->{'resourceAccessor'}->{'api'}->{'discoveryDocument'}->{'baseUrl'} . "/" . $path);
     $r->set_method($method->{'httpMethod'});
     my $r = $self->{'resourceAccessor'}->{'api'}->new_request;
     $r->set_uri($self->{'resourceAccessor'}->{'api'}->{'discoveryDocument'}->{'baseUrl'} . "/" . $path);
     $r->set_method($method->{'httpMethod'});
@@ -83,7 +88,7 @@ sub execute
     my $data, $headers;
     my ($status_number, $status_phrase) = $r->get_status();
     if ($status_number != 200) {
     my $data, $headers;
     my ($status_number, $status_phrase) = $r->get_status();
     if ($status_number != 200) {
-        croak("API call failed: $status_number $status_phrase\n". $r->get_body());
+        croak("API call /$path failed: $status_number $status_phrase\n". $r->get_body());
     }
     $data = $r->get_body();
     $headers = $r->get_headers();
     }
     $data = $r->get_body();
     $headers = $r->get_headers();