zeflasher / rest
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2022-02-01 12:47:57 UTC
README
简介
RestServer 是一个用于构建 RESTful Web 服务和网站的 PHP 库(或微框架)。
它允许您将 URL 模式映射到特定的控制器,并通过 RestRequest 接口访问 HTTP 请求属性,以及使用 RestResponse 对象控制响应。它支持调用链式操作、身份验证,并且非常简单易用,可以与您喜欢的框架结合使用。还有一个独立的 RestClient 类,可以轻松访问 RESTful 服务器。
下载包后,您可以导航到 docs 文件夹查看 API 文档,以及 tests 文件夹查看测试和示例。
这是一个稳定的包,已经使用了近 3 年(且仍在使用中),它易于扩展并适应您的需求。
有两个已发布的示例:JobJoker 是一个用于 PHP 的 Job/进程控制 API/UI,IdeasWall.org 是在 Google App Engine 上运行 PHP 和 RestServer 的实验(已过时,现在的身份验证方式不同,但 REST 仍然可以使用)
使用方法
<?php
$rest = new RestServer ;
$rest->addMap("POST","/user", function($rest) {
$json = $rest->getRequest()->getBody(); // the body, getPOST($key) is also available for form submissions
// go to db and save it
$rest->getResponse()->addHeader("201 Created");
$rest->getResponse()->setResponse('{"ok":true}');
return $rest;
});
$rest->addMap("GET","/user/:name",function($rest) {
$rest->getAuthenticator()->requireAuthentication(true);
$username = $rest->getRequest()->getParameter("name"); // url parameter
if(!($username == $rest->getAuthenticator()->getUser())) { ; // Basic or Digest authentication
$rest->getAuthenticator()->setAuthenticated(false); // Request authentication
return $rest;
}else {
$rest->getAuthenticator()->setAuthenticated(true); // Request authentication
}
$rest->getResponse()->setResponse("Hello, ". $username);
return $rest;
});
echo $rest->execute();
?>
RestServer
一切从 RestServer 类开始,该类必须实例化。它更适合使用适当的 URL 重写 URL,但这不是强制性的。.htaccess 的一个示例:.htaccess
您首先在端点实例化 RestServer,您可以传递一个参数作为 URL 使用,或者让它猜测,这将准备请求、响应和身份验证器对象。 index.php 第 29 行 和 index.php 第 11 行
您还可以设置全局参数对象,这些对象可以通过 restserver 上的 "setParameter" 和 "getParameter" 在控制器上访问。接下来,您必须将 URL(使用正则表达式)映射到控制器(或控制器的一个特定方法),并指定使用的 HTTP 方法。另一种选择是提供一个匿名函数(lambda 或 closure)。 index.php 第 44~64 行 和 index.php 第 34~42 行
要使 RestServer 运作,您只需调用 "execute"。 index.php 第 66 行 和 index.php 第 58 行
RestAuthenticator
您还可以在全局范围(或每个控制器内部)使用认证器对象(通过在RestServer上使用"getAuthenticator"获取)进行认证。index.php第31~37行
控制器和视图(也包含RestRequest和RestResponse)
接下来,您可以构建您的控制器,它们必须实现RestController接口,并且它们的方法必须接受RestServer作为参数。它们可以返回另一个控制器/视图的RestServer以转发请求。
使用RestResponse对象上的“addResponse”、“setResponse”、“addHeader”、“cleanHeaders”方法(从RestServer的“getResponse”获取)来准备响应。
使用RestRequest的方法
- getGet、getPost、getPut获取每种请求类型的参数
- getBody返回请求体作为字符串
- getExtension、acceptMime以了解请求的类型
- getURI获取部分url(如参数)
- isGet、isPost、isPut、isDelete