在过去的几周里,我一直在学习iOS开发,这自然使我进入了API世界。现在,在互联网上搜索,我得出的结论是,由于其简单易用的实现,我们非常推荐使用REST架构。
但是,我真的在与REST的实现方面挣扎。我理解这个概念;使用HTTP方法作为动词来描述请求的动作并使用合适的响应代码进行响应,等等。只是,我不明白如何编码。
我不了解如何将URI映射到对象。我理解域名/api/user/address?user_id=999的GET请求将返回用户999的地址 - 但我不明白从/ user / address到查询某个方法的映射的位置或方式数据库已经发生。
这是否都在一个PHP脚本中编码?我是否只有一个像这样抓取URI的方法:
$array = explode("/", ltrim(rtrim($_SERVER['REQUEST_URI'], "/"), "/"))
然后循环遍历该数组,首先我会请求“user”,因此PHP脚本会将我的请求定向到用户对象,然后调用address方法。那是真的发生了吗?
我没有得到的主要内容是URI /用户/地址?id = 999如何分解并执行 - 它实际上是否解析为代码?
class user(id) {
address() {
//get user address
}
}
答案 0 :(得分:1)
这是两个问题。
要尊重RESTful HTTP谓词,您必须查询$_SERVER["REQUEST_METHOD"]
。除非收到更专业的HTTP请求,否则它将包含通常的GET或POST。整个REST的嗡嗡声本身就有些误导,也误用了HTTP动词只是为了路由。
无论如何,请求URL到函数的映射可以通过两种方式实现。使用静态映射是最可靠的,例如列出URL模式和目标方法的数组。大多数PHP框架都使用隐式映射,如下所示:
$args = explode("/", trim($_SERVER['REQUEST_URI'], "/"));
$class = array_shift($args);
$method = array_shift($args);
call_user_func_array("$class::$method", $args);
请注意这是一个糟糕的例子,安全方面。只有允许且专门准备的类和方法才能接收请求。大多数框架只是在从已知路径加载和/或实例化之后检查它是否是从可接受的基类派生的。但静态地图确实更可取。
无论如何,正则表达式映射或mod_rewrite处理也很常见。并且为了使用HTTP动词,只需将其作为方法名称包含。
答案 1 :(得分:1)
实际上,您现在要描述的API是not RESTful。有许多来源描述如何制作RESTful API。因此,您应首先定义您的API(考虑您的客户端软件将如何使用它)然后实现它。我很确定几乎所有的RESTful API都可以在PHP中实现。
Here是关于如何制作RESTful API的其他一些提示。
在我看来,GlassFish Server REST Interface是RESTful设计的一个很好的例子。
答案 2 :(得分:0)
看看FRAPI - http://getfrapi.com/
因为它专注于您的业务逻辑,而不是演示。