[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[EP-tech] Sending out Error Statuses with Error codes

Thanks, John.? My function looks like this now:


sub api_error


??????? my ($repo, $code, $message) = @_;


??????? my $r = $repo->request;


??????? $r->status($code);

??????? $r->custom_response($code, $message);


??????? return $code;



?and while isn?t quite as fancy as I?d like it, it does the job well enough to integrate with swagger UI (which was the key goal).? I can always make it better later.







From: <eprints-tech-bounces at ecs.soton.ac.uk> on behalf of John Salter <J.Salter at leeds.ac.uk>
Reply-To: <eprints-tech at ecs.soton.ac.uk>
Date: Tuesday, 26 June 2018 17:32
To: "eprints-tech at ecs.soton.ac.uk" <eprints-tech at ecs.soton.ac.uk>
Subject: Re: [EP-tech] Sending out Error Statuses with Error codes


Apologies - that was only ? helpful?

This is the other bit that I think you need:






From: John Salter 
Sent: 26 June 2018 17:27
To: eprints-tech at ecs.soton.ac.uk
Subject: RE: Sending out Error Statuses with Error codes


Hi Adam,

You need the 'mod_perl2 User's Guide' by Bekman and Brandt? :o)


Or hopefully this:






From: eprints-tech-bounces at ecs.soton.ac.uk [mailto:eprints-tech-bounces at ecs.soton.ac.uk] On Behalf Of Adam Field
Sent: 26 June 2018 17:01
To: eprints-tech at ecs.soton.ac.uk
Subject: [EP-tech] Sending out Error Statuses with Error codes




                I?m working on an API that spits out objects in JSON, and I have a function that handles errors.  I can?t seem to get it to behave, and I wonder if anyone can offer me any advice.


sub api_error


        my ($repo, $code, $message) = @_;


        my $r = $repo->request;



        EPrints::Apache::AnApache::send_status_line( $r, $code );



        my $json = JSON->new;

        my $content = $json->encode(


                status => $code,

                message => $message




        $r->err_headers_out->{'Content-Length'} = length $content;


#       binmode(STDOUT, ":utf8");

#       print $content;


        return $code;



Using CURL to look at the headers and body, I get this:


HTTP/1.1 400 Bad Request

Date: Tue, 26 Jun 2018 15:48:51 GMT

Server: Apache/2.4.7 (Ubuntu)

Content-Length: 120

Connection: close

Content-Type: text/html; charset=iso-8859-1





<title>400 Bad Request</title>


<h1>Bad Request</h1>

<p>Your browser sent a request that this server could not understand.<br />



<address>Apache/2.4.7 (Ubuntu) Server at sherpaneo-test.sherpa.ac.uk Port 443</address>



If I uncomment the two commented lines, I get this:


HTTP/1.1 200 OK

Date: Tue, 26 Jun 2018 15:48:36 GMT

Server: Apache/2.4.7 (Ubuntu)

Content-Length: 120

Content-Type: application/json



{"message":"unrecognised api key in 'api-key' at /usr/share/eprints3/lib/plugins/SherpaAPI.pm line 470.\n","status":400}



Essentially, if I output anything to STDOUT, something (maybe MOD Perl) switches the status to ?200 OK?.  How can I get the status code from the first version, and the body from the second?  Any ideas?






Adam Field

*** Options: http://mailman.ecs.soton.ac.uk/mailman/listinfo/eprints-tech *** Archive: http://www.eprints.org/tech.php/ *** EPrints community wiki: http://wiki.eprints.org/ *** EPrints developers Forum: http://forum.eprints.org/ 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ecs.soton.ac.uk/pipermail/eprints-tech/attachments/20180627/f44ac271/attachment-0001.html