Workspace API resource

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}

Privileges

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
}

Parameters validation

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

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'
);

Response data

function fetchRows()
{
    $this->addRow($row); // if $rowType = 'multiple';
    $this->setData($data); // Set the return data
}

Full Method list

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

Example file

<?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
    }
}