Viewing file: RestRequestItem.php (7.05 KB) -rwxr-xr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php /** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */
/** * Represents the request items that come from the restful request. */ class RestRequestItem extends RequestItem { private $url; private $params; /** * @var InputConverter */ private $inputConverter; /** * @var OutputConverter */ private $outputConverter; private $postData;
public function __construct($service, $method, SecurityToken $token, $inputConverter, $outputConverter) { parent::__construct($service, $method, $token); $this->inputConverter = $inputConverter; $this->outputConverter = $outputConverter; }
/** * @return RestRequestItem */ public static function createWithRequest($servletRequest, $token, $inputConverter, $outputConverter) { $restfulRequestItem = new RestRequestItem(self::getServiceFromPath($servletRequest['url']), self::getMethod(), $token, $inputConverter, $outputConverter); $restfulRequestItem->setUrl($servletRequest['url']); if (isset($servletRequest['params'])) { $restfulRequestItem->setParams($servletRequest['params']); } else { $paramPieces = parse_url($restfulRequestItem->url); if (isset($paramPieces['query'])) { $params = array(); parse_str($paramPieces['query'], $params); $restfulRequestItem->setParams($params); } } if (isset($servletRequest['postData'])) { $restfulRequestItem->setPostData($servletRequest['postData']); } return $restfulRequestItem; }
public function setUrl($url) { $this->url = $url; }
public function setParams($params) { $this->params = $params; }
public function setPostData($postData) { $this->postData = $postData; $service = $this->getServiceFromPath($this->url); switch ($service) { case ApiServlet::$PEOPLE_ROUTE: // in our current implementation this will throw a SocialSPIException since we don't support // adding people/friendships in our API yet, but this might be added some day $data = $this->inputConverter->convertPeople($this->postData); break; case ApiServlet::$ACTIVITY_ROUTE: $data = $this->inputConverter->convertActivities($this->postData); $this->params['activity'] = $data; break; case ApiServlet::$APPDATA_ROUTE: $data = $this->inputConverter->convertAppData($this->postData); $this->params['data'] = $data; break; case ApiServlet::$MESSAGE_ROUTE: $data = $this->inputConverter->convertMessages($this->postData); // 'entity' may be a message or a message collection. $this->params['entity'] = $data; break; case ApiServlet::$INVALIDATE_ROUTE: $this->params = json_decode($this->postData, true); break; case ApiServlet::$ALBUM_ROUTE: $data = $this->inputConverter->convertAlbums($this->postData); $this->params['album'] = $data; break; case ApiServlet::$MEDIA_ITEM_ROUTE: $data = $this->inputConverter->convertMediaItems($this->postData); if (isset($data)) { $this->params['mediaItem'] = $data; } break; default: throw new Exception("Invalid or unknown service endpoint: $service"); break; } } /** * '/people/@me/@self' => 'people' * '/invalidate?invalidationKey=1' => 'invalidate' */ static function getServiceFromPath($pathInfo) { $pathInfo = substr($pathInfo, 1); $indexOfNextPathSeparator = strpos($pathInfo, '/'); $indexOfNextQuestionMark = strpos($pathInfo, '?'); if ($indexOfNextPathSeparator !== false && $indexOfNextQuestionMark !== false) { return substr($pathInfo, 0, min($indexOfNextPathSeparator, $indexOfNextQuestionMark)); } if ($indexOfNextPathSeparator !== false) { return substr($pathInfo, 0, $indexOfNextPathSeparator); } if ($indexOfNextQuestionMark !== false) { return substr($pathInfo, 0, $indexOfNextQuestionMark); } return $pathInfo; }
static function getMethod() { if (isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) { return $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']; } else { return $_SERVER['REQUEST_METHOD']; } }
/** * This could definitely be cleaner.. * TODO: Come up with a cleaner way to handle all of this code. * * @param urlTemplate The template the url follows */ public function applyUrlTemplate($urlTemplate) { $paramPieces = @parse_url($this->url); $actualUrl = explode("/", $paramPieces['path']); $expectedUrl = explode("/", $urlTemplate); for ($i = 1; $i < count($actualUrl); $i ++) { $actualPart = isset($actualUrl[$i]) ? $actualUrl[$i] : null; $expectedPart = isset($expectedUrl[$i]) ? $expectedUrl[$i] : null; if (strpos($expectedPart, "{") !== false) { $this->params[preg_replace('/\{|\}/', '', $expectedPart)] = explode(',', $actualPart); } elseif (strpos($actualPart, ',') !== false) { throw new IllegalArgumentException("Cannot expect plural value " + $actualPart + " for singular field " + $expectedPart + " in " + $this->url); } else { $this->params[$expectedPart] = $actualPart; } } }
public function getParameters() { return $this->params; }
public function setParameter($paramName, $paramValue) { // Ignore nulls if ($paramValue == null) { return; } $this->params[$paramName] = $paramValue; }
/** * Return a single param value */ public function getParameter($paramName, $defaultValue = null) { $paramValue = isset($this->params[$paramName]) ? $this->params[$paramName] : null; if ($paramValue != null && ! empty($paramValue)) { return $paramValue; } return $defaultValue; }
/** * Return a list param value */ public function getListParameter($paramName) { $stringList = isset($this->params[$paramName]) ? $this->params[$paramName] : null; if ($stringList == null) { return array(); } elseif (is_array($stringList)) { // already converted to array, return straight away return $stringList; } if (strpos($stringList, ',') !== false) { $stringList = explode(',', $stringList); } else { // Allow up-conversion of non-array to array params. $stringList = array($stringList); } $this->params[$paramName] = $stringList; return $stringList; } }
|