aboutsummaryrefslogtreecommitdiffstats
path: root/lib/api.php
diff options
context:
space:
mode:
authorTom Needham <needham.thomas@gmail.com>2012-07-28 21:40:11 +0000
committerTom Needham <needham.thomas@gmail.com>2012-07-28 21:40:11 +0000
commit20838bb9c2f77bf45cf7e4bccf9f941cbc39bbdb (patch)
treebe9ef1dde3d2a557d56ae5a0e14b78e2423a1929 /lib/api.php
parentedb04b25dea733e0ac3a1f87c55cfd368dcdf731 (diff)
downloadnextcloud-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.php91
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