blacknell / restapi-service
用于公开 REST API 的简单类
0.7
2021-02-02 13:38 UTC
Requires
- ext-json: *
- monolog/monolog: ^2.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.0
- phpmd/phpmd: ^2.7.0
- phpunit/phpunit: ^4.8.36 || ^5.5 || ^6.5 || ^7.5 || ^9.5.1
- squizlabs/php_codesniffer: ^3.3
README
restapi-service
将 REST API 调用映射到派生类中受保护的方法的端点。在类方法中,根据 HTTP 请求的动词和参数进行处理。
安装
使用以下命令安装最新版本:
$ composer require blacknell/restapi-service
基本用法
- 复制
example/api.php
并将类(如examples/MyAPI.class.php
)派生到您的 Web 服务器目录中 - 配置
.htaccess
文件以将您的 RESTful 调用重写到您的类
Web 服务器配置
例如,https://yourserver/myapi/v1/daylight/littlehampton/yesterday
映射到 https://yourserver/myapi/v1/api.php?request=daylight/littlehampton/yesterday
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule myapi/v1/(.*)$ myapi/v1/api.php?request=$1 [QSA,NC,L]
</IfModule>
示例代码
查看 example/MyAPI.class.php,了解如何生成以下 JSON 输出:https://yourserver/myapi/v1/daylight/littlehampton/yesterday
{
"description": "Between sunrise and sunset yesterday",
"sunrise": {
"date": "2019-01-07 08:00:56.000000",
"timezone_type": 3,
"timezone": "Europe\/London"
},
"sunset": {
"date": "2019-01-07 16:15:44.000000",
"timezone_type": 3,
"timezone": "Europe\/London"
}
}
其他概念
跨源资源共享 (CORS)
您可以在派生类的构造函数中添加额外的头信息 在 调用父构造函数之前。例如,要允许一个位于网站 http://myclient.com 的客户端访问您的 API,请添加此头信息调用。
public function __construct($request, \Monolog\Logger $logger = null)
{
header('Access-Control-Allow-Origin: http://myclient.com');
parent::__construct($request, $logger);
}
身份验证
覆盖 RestAPI::isAuthenticated()
来处理身份验证,并且只有在请求被授权时才返回 true
。作为一个基本示例,您可以对请求强制包含一个如 Authentication-Token: xxx
的头信息,并在派生类中进行测试。
protected function isAuthenticated()
{
$headers=getallheaders();
if($headers['Authentication-Token'] !== 'xxx') {
return false;
} else {
return parent::isAuthenticated();
}
}
错误处理
未映射到派生类中受保护函数的任何端点将导致以下 JSON 响应。
{
"error": "No endpoint",
"code": 404
}
您的派生类也应对无效的动词或参数执行相同的操作。除 GET、POST、PUT 或 DELETE 以外的其他方法也会导致错误。
日志记录
通过将可选的 Logger
对象传递给 API 构造函数,通过 monolog/monolog 支持 PSR-3 日志记录。