我正在开发一个跨平台的系统,我需要做一个休息API绑在一起。 我在PHP长期的经验,我想用这个此服务。
我可以手动开发一个API 100%,但我希望有一些伟大的图书馆,在那里,可以缓解我的发展。
有没有人有这样的图书馆的经验吗? 任何你可以推荐?
我正在开发一个跨平台的系统,我需要做一个休息API绑在一起。 我在PHP长期的经验,我想用这个此服务。
我可以手动开发一个API 100%,但我希望有一些伟大的图书馆,在那里,可以缓解我的发展。
有没有人有这样的图书馆的经验吗? 任何你可以推荐?
我得到了徽章Popular question
对这个问题,所以我觉得它的时候我阐述我怎么做我的REST-soluton。
我没有看这两个Laravel,Sympfony2和笨此REST API。 他们都有一些元素我喜欢和一些我不喜欢的。 我主要关注的是如何做身份验证,因为我有一个相当复杂的算法,其中我的用户可以与应用登录的access_token或access_tokens通过谷歌或Facebook服务。 我也perfer在我的框架的完全掌控之中,并在框架上面提到的有一些元素,我觉得不必要的和难以解决。 正因为如此,我决定把我自己的REST的解决方案。 这并不难,因为人们所预料的,它可以通过多种方式来完成。 我做它的方式要求有关OOP编程的一些知识。
奥基,所以开始了做了一个基类名为REST。 这个类需要的全部是常见的每次呼叫的东西照顾。 如身份验证,解析请求路径的方法,检查access_token
等。
一个在这类中央的事情是请求的路径,这是怎么翻译成方法。 我不希望这Laravel启发。 我有一个阵列key
=> value
,其中关键是它应当匹配URL和值是调用的实际方法。 我还包括Lavavel分析中,像这样的URL变量的方法:
'/user/(:id)' => 'user_id',
这将匹配任何/用户/ [数字]。 它还检查,这是什么类型的请求,所以如果这是一个简单的GET-方法,将尽量打电话get_user_id
。 任何与解析(:id)
会调用该方法(因此它实际上是调用时使用作为参数get_user_id($id)
认证后的实际方法调用获取评估。 我不希望所有的方法(如get_user_id
在REST类本身),所以我在扩展REST级不同的控制器打破这些了。 这是通过在URL寻找被要求做。 如果它是/user/(:id)
脚本将检查是否有一个名为控制器userController.php
。 如果它存在,检查是否我们要调用的方法存在。 如果是这样,检查参数的数量相匹配我们所拥有的。 如果一切都很好,执行方法,如果不返回错误消息。 做这样的API时的结构和错误信息是非常重要的。
在不同的控制器我呼吁REST-类的构造函数来获得认证,解析解析的网址等。 这里最棘手的部分是,我不想做的事:
$controller = new MyController();
$controller->printResponse();
在每个控制器的底部。 所以我做了一个小的黑客和脚本调用run.php
动态做这行的每个控制器类。 之前我包括run.php
我节省了控制器的路径简单地做$path = explode('/',__FILE__);
。 这是在运行脚本中使用。 运行脚本是这样的:
// Splitting the file-name, removing the extension
$name = explode('.',$path[count($path)-1]);
// Uppercasing the first letter to be nice and OOP-ish
$classToCall = ucfirst($name[0]);
// Creating a new instance
$controller = new $classToCall();
// Logging
$controller->doLog();
// Printing the final response
$controller->printResponse();
我觉得这是对我怎么想建立我的API一个完美的解决方案。 我可以很容易地通过解析网址的方法在阵列中提供它添加新的方法,我可以在很好地碎裂开控制器,用于最大清洁度添加新的方法。
有些人可能认为这是太多的工作,但实际上我只用了几个小时来得到它运行起来。 我想也把这种高度动态的,因为我可以再补充新的控制器,系统将识别它们,如果它们是有效的网址模式。
一些友好的建议。
如果你决定去与类似的东西这个解决方案,这可能是一些好的建议。 在每个控制器,做这样的事情:
public function __construct() {
// Loading the class-name, setting it in the REST-class, so we can check if it holds the method being called
$this->className = get_class($this);
// Calling RESTs constructor
parent::__construct();
}
我们将需要存储哪些类,我们目前无法正常工作。 这将是UserController
或类似的东西。
在REST级然后我就可以使用这个变量来检查是否获取调用实际的方法在该控制器确实存在。 我已经做了这种方式:
// Checking if the method exists
if (method_exists($this->className,$method_name)) {
// Check to see if we have the required number of arguments represented
$ReflectionClass = new ReflectionClass($this->className);
if ($ReflectionClass->getMethod($method_name)->getNumberOfParameters() == count($this->methodUrl['args'])) {
$this->response['response'] = call_user_func_array(array($this, $method_name), $this->methodUrl['args']);
我希望能得到你们去。
快乐打号
我三个月前有同样的问题。 我花了很多时间研究最好的PHP框架的使用。 最后,我定居在Laravel 。
开箱它配备了REST风格的路线和控制器,以及易于使用的身份验证。 我在大约一天一个简单的REST API和运行
http://laravel.com/docs/routing#the-basics
http://laravel.com/docs/controllers#restful-controllers
它还配备了一个伟大的ORM这使得建立资源超级方便
http://laravel.com/docs/database/eloquent
我使用的3.2版,它就像一个魅力和稳定。 第4版仍处于测试阶段,但确实有很多更多的休息导向功能(我认为一个是,它可以更容易地从你的控制器内创造资源)
这里伟大的教程http://net.tutsplus.com/tutorials/php/laravel-4-a-start-at-a-restful-api/