mirror of
https://github.com/silverstripe/silverstripe-restfulserver
synced 2024-10-22 14:05:58 +02:00
NEW Aliases can now be defined for DataObject endpoints (#80)
* set endpoint_aliases on RestfulServer to specify fixed aliases for exposed dataobjects * removed wrong use statements from older project * better docblock * use correct obj ClassName in RestfulServer::updateDataObject * added findClassNameEndpoint method, replaced getEndpointAlias() * getDataFormatter() - find correct endpoint instead of request param ClassName * Better docblock Co-Authored-By: Guy Marriott <guy@scopey.co.nz> * Better docblock Co-Authored-By: Guy Marriott <guy@scopey.co.nz> * Return type hint in findClassNameEndpoint method Co-Authored-By: Guy Marriott <guy@scopey.co.nz> * renamed endpoint method to resolveEndpoint * unsanitiseClassName in resolveEndpoint method * renamed resolveEndpoint to resolveClassName. Take $request as param instead of string * better docbloc * Remove unneccesary unsanitiseClassName call Co-Authored-By: Guy Marriott <guy@scopey.co.nz> * changed docblocks to satisfy codesniffer * Drop PHP 5.6 and 7.0 from travis Co-authored-by: Guy Marriott <guy@scopey.co.nz>
This commit is contained in:
parent
e0f4e5684f
commit
0b734c21c6
@ -8,11 +8,11 @@ env:
|
|||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- php: 5.6
|
|
||||||
env: DB=MYSQL RECIPE_VERSION=4.3.x-dev PHPCS_TEST=1 PHPUNIT_TEST=1
|
|
||||||
- php: 7.0
|
|
||||||
env: DB=MYSQL RECIPE_VERSION=4.4.x-dev PHPUNIT_TEST=1
|
|
||||||
- php: 7.1
|
- php: 7.1
|
||||||
|
env: DB=MYSQL RECIPE_VERSION=4.3.x-dev PHPCS_TEST=1 PHPUNIT_TEST=1
|
||||||
|
- php: 7.1
|
||||||
|
env: DB=MYSQL RECIPE_VERSION=4.4.x-dev PHPUNIT_TEST=1
|
||||||
|
- php: 7.2
|
||||||
env: DB=PGSQL RECIPE_VERSION=4.3.x-dev PHPUNIT_COVERAGE_TEST=1
|
env: DB=PGSQL RECIPE_VERSION=4.3.x-dev PHPUNIT_COVERAGE_TEST=1
|
||||||
- php: 7.2
|
- php: 7.2
|
||||||
env: DB=MYSQL RECIPE_VERSION=4.4.x-dev PHPUNIT_TEST=1
|
env: DB=MYSQL RECIPE_VERSION=4.4.x-dev PHPUNIT_TEST=1
|
||||||
|
@ -72,6 +72,18 @@ class RestfulServer extends Controller
|
|||||||
*/
|
*/
|
||||||
private static $default_extension = "xml";
|
private static $default_extension = "xml";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom endpoints that map to a specific class.
|
||||||
|
* This is done to make the API have fixed endpoints,
|
||||||
|
* instead of using fully namespaced classnames, as the module does by default
|
||||||
|
* The fully namespaced classnames can also still be used though
|
||||||
|
* Example:
|
||||||
|
* ['mydataobject' => MyDataObject::class]
|
||||||
|
*
|
||||||
|
* @config array
|
||||||
|
*/
|
||||||
|
private static $endpoint_aliases = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether or not to send an additional "Location" header for POST requests
|
* Whether or not to send an additional "Location" header for POST requests
|
||||||
* to satisfy HTTP 1.1: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
|
* to satisfy HTTP 1.1: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
|
||||||
@ -173,7 +185,7 @@ class RestfulServer extends Controller
|
|||||||
*/
|
*/
|
||||||
public function index(HTTPRequest $request)
|
public function index(HTTPRequest $request)
|
||||||
{
|
{
|
||||||
$className = $this->unsanitiseClassName($request->param('ClassName'));
|
$className = $this->resolveClassName($request);
|
||||||
$id = $request->param('ID') ?: null;
|
$id = $request->param('ID') ?: null;
|
||||||
$relation = $request->param('Relation') ?: null;
|
$relation = $request->param('Relation') ?: null;
|
||||||
|
|
||||||
@ -384,7 +396,7 @@ class RestfulServer extends Controller
|
|||||||
$accept = $this->request->getHeader('Accept');
|
$accept = $this->request->getHeader('Accept');
|
||||||
$mimetypes = $this->request->getAcceptMimetypes();
|
$mimetypes = $this->request->getAcceptMimetypes();
|
||||||
if (!$className) {
|
if (!$className) {
|
||||||
$className = $this->unsanitiseClassName($this->request->param('ClassName'));
|
$className = $this->resolveClassName($this->request);
|
||||||
}
|
}
|
||||||
|
|
||||||
// get formatter
|
// get formatter
|
||||||
@ -654,7 +666,7 @@ class RestfulServer extends Controller
|
|||||||
$rawdata = $this->request->postVars();
|
$rawdata = $this->request->postVars();
|
||||||
}
|
}
|
||||||
|
|
||||||
$className = $this->unsanitiseClassName($this->request->param('ClassName'));
|
$className = $obj->ClassName;
|
||||||
// update any aliased field names
|
// update any aliased field names
|
||||||
$data = [];
|
$data = [];
|
||||||
foreach ($rawdata as $key => $value) {
|
foreach ($rawdata as $key => $value) {
|
||||||
@ -885,4 +897,19 @@ class RestfulServer extends Controller
|
|||||||
{
|
{
|
||||||
return Security::getCurrentUser();
|
return Security::getCurrentUser();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if given param ClassName maps to an object in endpoint_aliases,
|
||||||
|
* else simply return the unsanitised version of ClassName
|
||||||
|
*
|
||||||
|
* @param HTTPRequest $request
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function resolveClassName(HTTPRequest $request): string
|
||||||
|
{
|
||||||
|
$className = $request->param('ClassName');
|
||||||
|
$aliases = self::config()->get('endpoint_aliases');
|
||||||
|
|
||||||
|
return $aliases[$className] ?? $this->unsanitiseClassName($className);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user