Add option to ApiFormatRaw to generate a HTTP errorcode
New method setFailWithHTTPError() allows you to configure ApiFormatRaw to return HTTP status code 400 in case it encounters (any) error. This is useful for when the output format is intended to be read by a user-agent which has no other method to be notified of errors. Change-Id: I11b2824c6725143cff5b4c56194f94c44ce451c0
This commit is contained in:
parent
4b7ba45d0c
commit
483e9d3cdb
1 changed files with 25 additions and 3 deletions
|
|
@ -31,14 +31,20 @@
|
|||
class ApiFormatRaw extends ApiFormatBase {
|
||||
|
||||
private $errorFallback;
|
||||
private $mFailWithHTTPError = false;
|
||||
|
||||
|
||||
/**
|
||||
* @param ApiMain $main
|
||||
* @param ApiFormatBase $errorFallback Object to fall back on for errors
|
||||
* @param ApiFormatBase |null $errorFallback Object to fall back on for errors
|
||||
*/
|
||||
public function __construct( ApiMain $main, ApiFormatBase $errorFallback ) {
|
||||
public function __construct( ApiMain $main, ApiFormatBase $errorFallback = null ) {
|
||||
parent::__construct( $main, 'raw' );
|
||||
$this->errorFallback = $errorFallback;
|
||||
if ( $errorFallback === null ) {
|
||||
$this->errorFallback = $main->createPrinterByName( $main->getParameter( 'format' ) );
|
||||
} else {
|
||||
$this->errorFallback = $errorFallback;
|
||||
}
|
||||
}
|
||||
|
||||
public function getMimeType() {
|
||||
|
|
@ -59,6 +65,9 @@ class ApiFormatRaw extends ApiFormatBase {
|
|||
$data = $this->getResult()->getResultData();
|
||||
if ( isset( $data['error'] ) ) {
|
||||
$this->errorFallback->initPrinter( $unused );
|
||||
if ( $this->mFailWithHTTPError ) {
|
||||
$this->getMain()->getRequest()->response()->statusHeader( 400 );
|
||||
}
|
||||
} else {
|
||||
parent::initPrinter( $unused );
|
||||
}
|
||||
|
|
@ -85,4 +94,17 @@ class ApiFormatRaw extends ApiFormatBase {
|
|||
}
|
||||
$this->printText( $data['text'] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Output HTTP error code 400 when if an error is encountered
|
||||
*
|
||||
* The purpose is for output formats where the user-agent will
|
||||
* not be able to interpret the validity of the content in any
|
||||
* other way. For example subtitle files read by browser video players.
|
||||
*
|
||||
* @param bool $fail
|
||||
*/
|
||||
public function setFailWithHTTPError( $fail ) {
|
||||
$this->mFailWithHTTPError = $fail;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue