blacknell/restapi-service

用于公开 REST API 的简单类

0.7 2021-02-02 13:38 UTC

This package is auto-updated.

Last update: 2024-09-29 05:21:30 UTC


README

Build Status Latest Stable Version Latest Unstable Version License

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 日志记录。