[Solar-talk] Sungrazr_Server: Request for comments

Antti Holvikari anttih at gmail.com
Fri Dec 21 16:52:54 CST 2007


On Dec 19, 2007 1:53 AM, Clay Loveless <clay at killersoft.com> wrote:
> Hey folks,
>
> If anyone is interested, I'm implementing an abstracted web services
> server for Solar, which is similar (at least in theory) to Zend_Server
> and bits in Zend Framework that inherit from it, such as
> Zend_Rest_Server.
>
> This work is sponsored by and donated by Mashery.
>
> I'm interested in comments/feedback from the Solar community on this
> work, as I hope it will prove to be useful to more people than just me/
> Mashery.
>
> The 5,000 ft view is this:
>
> Sungrazr_Server:
>      Factory class to load a server adapter, similar to many other
> factories within Solar.
>      http://sungrazr.com/browser/trunk/Sungrazr/Server.php
>
> Sungrazr_Server_Adapter:
>      Abstract class which handles setting up server introspection,
> returning responses, etc.
>          - Leverages Solar_Docs_Apiref for introspection, since a lot
> of handy Reflection
>            stuff is already in there. (Actually calls
> Sungrazr_Server_Api.)
>          - Implements Serializable interface, so adapters can use
> custom serialize/unserialize
>            methods for XML-RPC, JSON-RPC, WHO-KNOWS-WHAT'S-NEXT-RPC,
> etc.
>      http://sungrazr.com/browser/trunk/Sungrazr/Server/Adapter.php
>
> Sungrazr_Server_Api:
>      Extends Solar_Docs_Apiref to provide equivalent behavior to
> Zend_Server_Reflection.
>      Supports internal caching so that request handler classes don't
> have to be analyzed
>      with the Reflection API repetitively.
>      http://sungrazr.com/browser/trunk/Sungrazr/Server/Api.php
>
> Sungrazr_Server_Handler:
>      Abstract class intended to act as a base for an actual API
> request handler class.
>      Extends Solar_Base and adds some handy fault-response methods and
> a couple properties
>      for awareness of what web service method was used to call the
> class, should it
>      be necessary.
>      http://sungrazr.com/browser/trunk/Sungrazr/Server/Handler.php
>
> Sungrazr_Server_Adapter_JsonRpc:
>      First adapter. Supports JSON-RPC, described at json-rpc.org.
>      http://sungrazr.com/browser/trunk/Sungrazr/Server/Adapter/JsonRpc.php
>
> Sungrazr_Docs_Phpdoc:
>      Minor extension to Solar_Doc_Phpdoc to support a @supports
> docblock tag that
>      Sungrazr_Server_Api can pick up. Can be used to tell the
> forthcoming
>      Sungrazr_Server_Adapter_Rest class what methods may/may not be
> supported by specific
>      HTTP request methods.
>      http://sungrazr.com/browser/trunk/Sungrazr/Docs/Phpdoc.php
>
>
> It's all still a little rough at the moment, but is iterating rapidly
> this week.
>
> Example usage:
>
> server.php:
>
> $request = Solar::factory('Solar_Request');
> $server = Solar::factory('Sungrazr_Server', array('adapter' =>
> 'Sungrazr_Server_Adapter_JsonRpc'));
> $server->addClass('Vendor_Api_Stuff');
>
> $server->handle($request);
>
>
> So... the class:
>
> Vendor_Api_Stuff extends Sungrazr_Server_Handler:
> ...
> public function create($apikey, $properties) { ... }
>
>
> ... is callable like this:
>
> $url = 'http://example.com/api
>
> $call = array(
>      'method' => 'stuff.create',
>      'params' => array(
>          array('apikey' => 'foo'),
>          array('properties' => array(
>              'first_name' => 'John',
>              'last_name'  => 'Public',
>          )),
>      ),
>      'id' => 55
> );
>
>
> $call = json_encode($call);
>
> $req = new HttpRequest($url, HttpRequest::METH_POST);
> $req->setBody($call);
> $msg = $req->send();
>
>
> ... sends a message via POST to the JSON-RPC api that has a POST body
> of:
>
> {"method":"stuff.create","params":[{"apikey":"foo"},{"properties":
> {"first_name":"John","last_name":"Public"}}],"id":55}
>
>
> And receives a response of:
>
> {"result":{"success":true},"error":null,"id":55}
>
>
> ... more to come. But, that's what's there now. Comments/feedback
> welcome!

Clay, did you get my reply to this?


-- 
Antti Holvikari


More information about the Solar-talk mailing list