diff options
author | Tom Needham <needham.thomas@gmail.com> | 2012-07-28 21:40:11 +0000 |
---|---|---|
committer | Tom Needham <needham.thomas@gmail.com> | 2012-07-28 21:40:11 +0000 |
commit | 20838bb9c2f77bf45cf7e4bccf9f941cbc39bbdb (patch) | |
tree | be9ef1dde3d2a557d56ae5a0e14b78e2423a1929 /lib/api.php | |
parent | edb04b25dea733e0ac3a1f87c55cfd368dcdf731 (diff) | |
download | nextcloud-server-20838bb9c2f77bf45cf7e4bccf9f941cbc39bbdb.tar.gz nextcloud-server-20838bb9c2f77bf45cf7e4bccf9f941cbc39bbdb.zip |
Basic structure and functionality of api class
Diffstat (limited to 'lib/api.php')
-rw-r--r-- | lib/api.php | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/lib/api.php b/lib/api.php new file mode 100644 index 00000000000..767f1d30b7d --- /dev/null +++ b/lib/api.php @@ -0,0 +1,91 @@ +<?php +/** + * ownCloud + * + * @author Tom Needham + * @author Michael Gapczynski + * @author Bart Visscher + * @copyright 2012 Tom Needham tom@owncloud.com + * @copyright 2012 Michael Gapczynski mtgap@owncloud.com + * @copyright 2012 Bart Visscher bartv@thisnet.nl + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + * + */ + + class OC_API { + + /** + * api actions + */ + protected $actions = array(); + + /** + * registers an api call + * @param string $method the http method + * @param string $url the url to match + * @param callable $action the function to run + */ + public function register($method, $url, $action){ + $name = strtolower($method).$url; + if(!isset(self::$actions[$name])){ + OC_Router::create($name, $url) + ->action('OC_API', 'call'); + self::$actions[$name] = array(); + } + self::$actions[$name][] = $action; + } + + /** + * handles an api call + * @param array $parameters + */ + public function call($parameters){ + // TODO load the routes.php from apps + $name = $parameters['_name']; + $response = array(); + // Loop through registered actions + foreach(self::$actions[$name] as $action){ + if(is_callable($action)){ + $action_response = call_user_func($action, $parameters); + if(is_array($action_response)){ + // Merge with previous + $response = array_merge($response, $action_response); + } else { + // TODO - Something failed, do we return an error code, depends on other action responses + } + } else { + // Action not callable + // log + // TODO - Depending on other action responses, do we return a 501? + } + } + // Send the response + if(isset($parameters['_format'])){ + self::respond($response, $parameters['_format']); + } else { + self::respond($response); + } + } + + /** + * respond to a call + * @param int|array $response the response + * @param string $format the format xml|json + */ + private function respond($response, $format='json'){ + // TODO respond in the correct format + } + + }
\ No newline at end of file |