Workspace API resource
Version 1.1 28.11.2013
Create custom API resource for workspace
Version 1.1 28.11.2013
Create custom API resource for workspace
Boilerplate -file can be created via action codefiles -panel.
Name | Description |
---|---|
Filename | account/mad/action/api/{api_name}/{method}.php |
Class name | eApiResponseAccountActionApi{ApiName}{Method} EXTENDS eApiResponseActionGet |
Api resource | {METHOD} api/{workspace_name}/{api_name} |
Set privilege according to user level:
protected $privilege = 'user'; // admin/root
Check privilege using method:
function isPrivilege()
{
$isPrivilege = parent::isPrivilege(); // required parameters, $privilege
$privilege = $isPrivilege && $this->isPrivilegeAction();
// My check here
return $privilege
}
Define parameters. Parameters will be validated according to the parameter type. They are also visible in api documentation.
protected $requestParameters = Array(
'parameter_name' => 'String'
'name' => Array(
'type' => 'String', // Parameter type
'description' => '', // Additional info
'unit' => '', // Date: day, week, month, quarter, year
'required' => false,
'default' => 'Value',
'example' => 'Value',
// Availble values
'values' => 'one, two,three', // Comma -delimited list
'values' => 'order.status', // table.field preferences
'values' => Array( // As array
'value' => '',
'title' => '',
'description' => ''
),
// Only Date -type
'date_type' => 'start', // start / end
// Only Id -type
'table' => 'name', // Table name
),
// Multidimensional parameters
'where' => Array(
'employee' => 'Id'
)
);
Parameter types
Type | Description |
---|---|
Id | Comma delimited list or array of id -values. Converted to int -strings. |
String | String value. |
Number | Converted to decimal |
Bool | Converted to bool. 'yes', '1' and 'true' are considered to be TRUE |
Date | Converted to YYYY-MM-DD (via eDate). date_type: start,end. unit: day,week,month,quarter,year |
Time | Convertrd to HH:MM:SS (via eTime) |
DateTime | Converted to YYYY-MM-DD HH:MM:SS (via eDate, eTime) |
Array | Array of data |
Object | Single level array |
Validate parameters using method:
function validateParams($params)
{
$params = parent::validateParams($params); // Against $requestParameters
return $params;
}
Response is single -level object or array of objects:
protected $rowType = 'multiple'; // single/multiple
Define response data. Define data that is in api data. Visible in api documentation.
protected $responseData = Array(
'parameter_name' => 'String'
);
function fetchRows()
{
$this->addRow($row); // if $rowType = 'multiple';
$this->setData($data); // Set the return data
}
Name | Returns | Descripotion |
---|---|---|
fetchRows() | Set return data | |
isPrivilege() | Bool | Return true, if user has privilege. |
isPrivilegeAction() | Bool | Return true, if user has privilege to action. |
getAction() | Action | Action object |
getTable() | Table | Table object (if action is linked to table or given param 'table') |
getPage() | Page | Page object (if Table and given param 'page') |
getLogValue() | String | Return string that is saved as request log, value. (Default: id::page) |
getLogMessage() | String | Return string that is saved as request log, message. (Default: response rows) |
validateValue($value,array $parameter, string $name) | Validate given value according to parameter argument |
<?php
/**
* Api response for {ActionTitle}
*/
class eApiResponseAccountActionApi{ApiName}{Method} EXTENDS eApiResponseActionGet
{
/** @param string $privilege global/visitor/none?, user, admin, php, root */
protected $privilege = 'user'; // admin/root
/** @param string $rowType Response data single, multiple rows */
protected $rowType = 'multiple'; // single/multiple
/** @param array $requestParameter Define parameters available in */
protected $requestParameters = Array(
'name' => 'String', // Define just type
'name' => Array(
'type' => 'String', // Id, String, Number, Bool, Date, Time, DateTime, Array (Array of data), Object (single level array)
'description' => '', // Additional info
'unit' => '', // Date: day, week, month, quarter, year
'required' => false,
'default' => 'Value',
'example' => 'Value',
// Availble values
'values' => 'one, two,three', // As Comma -delimited list
'values' => 'order.status', // table.field preferences
'values' => Array( // As array
'value' => '',
'title' => '',
'description' => '',
),
// Only Date -type
'date_type' => 'start', // start / end
// Only Id -type
'table' => 'name', // Table name
),
// Multidimenional
'where' => Array(
'start_date' => Array(
'type' => 'Date',
'date_type' => 'start',
'required' => true
),
)
);
/** @param array $responseData Return values */
protected $responseData = Array(
'name' => 'Description', // Define just description.
'name' => Array(
'type' => 'String', // // Id, String, Number, Bool, Date, Time, DateTime, Selection
'description' => '',
'example' => '',
'values' => Array(
'value_a' => 'Value A',
'value_b' => Array(
'title' => 'Value B',
'description' => ''
)
)
),
'customer' => Array(
'type' => 'Data',
'length' => '1', // 0-1, 1, 1-n, 0-n
'data' => Array(
'firstname' => 'String',
'lastname' => Array(
'type' => 'String'
)
)
)
);
/*
/** Return true, if user has privilege. * /
function isPrivilege()
{
$isPrivilege = parent::isPrivilege();
return $isPrivilege && $this->isPrivilegeAction();
}
*/
/*
/** Return string that is saved as request log, value. * /
function getLogValue()
{
}
*/
/*
/** Return string that is saved as request log, message. * /
function getLogMessage()()
{
}
*/
/*
/** Validate parameters * /
function validateParams($params)
{
$params = parent::validateParams($params); // Against $requestParameters
// @do here: additional validation
return $params;
}
*/
function fetchRows()
{
$debug = false;
$Statement = $this->get('table','order')->newSelectStatement(Array(
'from' => Array(
'customer' => '', // JOIN customer -table
'customer.info' => '' // JOIN customer info (otsikko etc)
),
'select' => Array(
'id' => '',
'order_number' => '',
'order_date' => '',
'status' => '',
'term_of_payment' => 'customer.term_of_payment',
'customer_title' => 'customer_info.otsikko'
),
'where' => Array(
"status = '".$this->getParam('where/status')."'", // Status is safe! (validated selection)
"order_date BETWEEN ".$this->getParam('where/start_date')." AND ".$this->getParam('where/end_date'), // Dates are validted data values
)
));
if ( $this->getParam('where/customer') ){
$Statement->addWhere("order.customer IN (".$this->getParam('where/customer').")"); // custer is validated comma -delimited list.
}
if ( $this->getParam('where/search') ){
$Statement->addFrom('info'); // JOIN order info (otsikko etc)
$Statement->addWhere("order_info.hakusana LIKE :search",Array( "search" => "%".$this->getParam('where/search')."%") );
}
if ( $debug ){
$Statement->setSqlLog(Array(
'title' => 'Get orders',
'description' => $this->getParam('where/status')." ".$this->getParam('where/start_date')." AND ".$this->getParam('where/end_date')
));
}
$data = $Statement->fetchAll();
// Manipulate data before adding it to response
foreach ( $data as $row ){
$row['color'] = $row['status'] == 'billed' ? 'green' : 'yellow' ;
$this->addRow($row);
}
// .. or just add data as it is
// $this->setData($data);
// $this->setStatus($status); // Set response status and message. If everything OK, status is set as 200
// $this->setMessage($message); // Set response message text
}
}