View Source

<ac:macro ac:name="unmigrated-inline-wiki-markup"><ac:plain-text-body><![CDATA[{zone-template-instance:ZFPROP:Proposal Zone Template}

{zone-data:component-name}
Zend_Service_GoGrid
{zone-data}

{zone-data:proposer-list}
[Enrico Zimuel|mailto:enrico@zend.com]
{zone-data}

{zone-data:liaison}
TBD
{zone-data}

{zone-data:revision}
1.0 - 19 April 2011: Initial Draft.
{zone-data}

{zone-data:overview}
*Zend_Service_GoGrid* is a class to manage the web services API of the [GoGrid|http://www.gogrid.com] cloud services.
The GoGrid API is a proprietary API that allows GoGrid developers, admins, and users to programmatically access the functions that are available through the UI of GoGrid services.
The API is a REST-like API meaning all API calls are submitted as HTTP GET or POST requests.

In particulat the API of GoGrid offers the management of the following services:
* job
* load balancer
* server
* server image
* ip
* passwords
* billing
* utility

The *Zend_Service_GoGrid* component will manage all these services.
The current version of the GoGrid API is *1.8*.

{zone-data}

{zone-data:references}
* [GoGrid API|https://wiki.gogrid.com/wiki/index.php/API]
* [GoGrid API client in PHP|https://wiki.gogrid.com/wiki/index.php/API:PHP_API_Developer_Home]
{zone-data}

{zone-data:requirements}

* This component will require a valid GoGrid account.
* This component will implement full GoGrid REST API.
* This component will throw an Exception in case of a response error.

{zone-data}

{zone-data:dependencies}
* Zend\Http\Client
{zone-data}

{zone-data:operation}
*Zend\Service\GoGrid* is an abstract class with methods and properties common to all the *GoGrid* services, like the API key, the procedure to build the checksum for the API call, etc. Each subclass of *Zend\Service\GoGrid* implements a specific service, for instance *Zend\Service\GoGrid\Job* implements the job cloud services of *GoGrid*.
These subclasses will use the *Zend\Rest\Client\RestClient* to perform the API REST calls. The REST output will be managed using the XML format.
{zone-data}

{zone-data:milestones}
* Milestone 1: Complete proposal
* Milestone 2: Prototype
* Milestone 3: Job API
* Milestone 4: Load Balancer API
* Milestone 5: Server API
* Milestone 6: Server Image API
* Milestone 7: IP API
* Milestone 8: Password API
* Milestome 9: Billing API
* Milestone 10: Utility API
* Milestone 11: Unit tests, checked into Git (ZF 2.0)
* Milestone 12: Refactor all the classes fot the ZF 1.*
* Milestone 13: Unit tests, checked into SVN (ZF 1.*)
* Milestone 14: Initial documentation exists

{zone-data}

{zone-data:class-list}
* Zend\Service\GoGrid
* Zend\Service\GoGrid\Job
* Zend\Service\GoGrid\LoadBalancer
* Zend\Service\GoGrid\Server
* Zend\Service\GoGrid\ServerImage
* Zend\Service\GoGrid\Ip
* Zend\Service\GoGrid\Password
* Zend\Service\GoGrid\Billing
* Zend\Service\GoGrid\Utility
* Zend\Service\GoGrid\Exception
{zone-data}

{zone-data:use-cases}
||UC-01||
{code:php}
$key= 'xxx';
$secret= 'yyy';

$job= new \Zend\Service\GoGrid\Job($key,$secret);

$options= array(
'num_items' => 20
);

$result= $job->getList($options);

if ($result->isSuccessful()) {
// use the result
}
{code}
{zone-data}

{zone-data:skeletons}
{code:php}
namespace Zend\Service\GoGrid;

use Zend\Service\GoGrid\Exception;

abstract class GoGrid
{
const URL_API= 'https://api.gogrid.com/api';
const FORMAT_API= 'xml';
/**
* GoGrid API key
*
* @var string
*/
protected $_apiKey;
/**
* GoGrid secret
*
* @var string
*/
protected $_secret;
/**
* GoGrid API version
*
* @var string
*/
protected $_apiVersion = '1.8';
/**
* __construct
*
* @param string $key
* @param string $secret
* @param string $apiVer
*/
public function __construct($key, $secret, $apiVer = null)
{
}
/**
* Set the API secret
*
* @param string $secret
*/
public function setSecret($secret)
{
}
/**
* Set the API key
*
* @param string $key
*/
public function setApiKey($key)
{
}
/**
* Get the API version
*
* @return string
*/
public function getVersion()
{
}
/**
* Compute the signature for the API call
*
* @return string
*/
protected function _computeSignature()
{
}
}

{code}
{zone-data}

{zone-template-instance}]]></ac:plain-text-body></ac:macro>