rest : rewrite to support the bestChoice of the user, and to be tested

rest : add tests


git-svn-id: https://svn.fournier38.fr/svn/ProgSVN/trunk@5803 bf3deb0d-5f1a-0410-827f-c0cc1f45334c
This commit is contained in:
2019-12-06 15:51:40 +00:00
parent df20f6c372
commit 66495ee503
2 changed files with 109 additions and 16 deletions

View File

@@ -1,36 +1,69 @@
<?php
/** DomFramework
@package domframework
@author Dominique Fournier <dominique@fournier38.fr> */
* @package domframework
* @author Dominique Fournier <dominique@fournier38.fr>
*/
require_once ("domframework/http.php");
/** Allow to manage the REST protocol by using the users output types */
/** Allow to manage the REST protocol by using the users output types
*/
class rest
{
/** Allowed types by default */
/** Allowed types by default
*/
public $allowedtypes = array ("json", "xml", "txt", "csv");
/** Converted types
*/
private $convert = array (
"application/json" => "json",
"application/xml" => "xml",
"text/plain" => "txt",
"text/csv" => "csv",
);
/** This method allow to choose the type of plugin to use on output
* Based on the HTTP_ACCEPT parameter provided by the user
* @return string like "json", "xml", "txt", "csv"
*/
public function chooseType ()
// {{{
{
$type = reset ($this->allowedtypes);
if (isset ($_SERVER["HTTP_ACCEPT"]))
{
// Must work with the complete definition to match, and by the name of
// the output plugin at the end
$convert = array_intersect ($this->convert, $this->allowedtypes);
$type = array_search (reset ($this->allowedtypes), $this->convert);
$http = new http;
$type = $http->bestChoice ($_SERVER["HTTP_ACCEPT"], array_keys ($convert),
$type);
$type = $this->convert[$type];
}
return $type;
}
// }}}
/** Display the message (which can be a string, an array, an integer...)
into the type asked by the client if it is allowed.
By default, the JSON type is used
@param string $message Message to be displayed by the output type
@param integer $code HTTP code to use */
function display ($message, $code=200)
* into the type asked by the client if it is allowed.
* By default, the JSON type is used
* @param string $message Message to be displayed by the output type
* @param integer|null $code HTTP code to use
*/
function display ($message, $code = 200)
// {{{
{
$http = new http;
$text = $http->codetext ($code);
header ($_SERVER["SERVER_PROTOCOL"]." $code $text");
$type = reset ($this->allowedtypes);
if (isset ($_SERVER["HTTP_ACCEPT"]))
{
$type = $http->bestChoice ($_SERVER["HTTP_ACCEPT"], $this->allowedtypes,
$type);
}
$type = $this->chooseType ();
require_once ("domframework/output$type.php");
$constr = __NAMESPACE__."\\output$type";
$method = "out";
$obj = new $constr ();
$obj->$method ($message);
}
// }}}
}