uspdev / webservice
用于创建RESTful webservices的库
Requires
- ext-sqlite3: *
- gabordemooij/redbean: ^5.4
- mikecao/flight: ^1.3
- uspdev/cache: *
- uspdev/ip-control: ^1
README
允许创建具有用户控制和IP控制的简单webservice的库。
由于管理被简化,因此不适合大量用户。
该库包含创建webservice所需的基本结构,包括路由和管理界面。
依赖
- PHP 7.0 或更高版本
- uspdev/cache
- uspdev/ip-control
为了使缓存工作,您需要安装memcached。
安装和配置
通过composer安装
composer require uspdev/webservice
配置数据库文件的存储文件夹。是的,它使用sqlite。
putenv('USPDEV_WEBSERVICE_LOCAL=' . __DIR__ . '/../local');
由于目的是创建其他系统可消费的webservice,它对人和浏览器的行为不佳。如果需要,可以使用以下变量使其更友好。这样,它将始终在提供的凭证不被接受时请求凭证。默认情况下是禁用的。
putenv('USPDEV_WEBSERVICE_USER_FRIENDLY=1');
在测试环境中,您可能不想使用缓存。为此,请禁用缓存。默认情况下是启用的。
putenv('USPDEV_CACHE_DISABLE=1');
通常,API被限制在本地范围内,因此限制IP地址是有意义的。理论上可以使用ipv6,但已使用ipv4进行测试。为了限制特定地址,请使用以下变量。有关如何配置包含释放IPs的文件的配置,请参阅https://github.com/uspdev/ip-control
putenv('USPDEV_IP_CONTROL=whitelist');
访问控制
访问控制通过用户/密码使用HTTP基本认证。因此,使用HTTPS非常重要。
用户可以是
- admin,具有对所有内容的访问权限,包括(如果已启用)管理界面
- 用户,具有授权访问的路线列表。如果用户被授权访问*,则可以访问系统的所有路线,但不是管理界面。
一些用户管理的示例。目前还没有更友好的界面。
use Uspdev\Webservice\Auth; Auth::salvarUsuario(['username'=>'admin', 'pwd'=>'admin', 'admin'=>'1', 'allow'=>'']); Auth::salvarUsuario(['username'=>'gerente', 'pwd'=>'gerente', 'admin'=>'0', 'allow'=>'*']); Auth::salvarUsuario(['username'=>'user1', 'pwd'=>'user', 'admin'=>'', 'allow'=>'minhaclasse1']); Auth::salvarUsuario(['username'=>'user1', 'allow'=>'minhaclasse1, minhaclasse2']); // alterando o usuário user1 Auth::removerUsuario(['username'=>'gerente']); Auth::listarUsuarios();
骨架
在skeleton/文件夹中有一个文件夹结构,可以用作示例。如果您想将其内容复制到项目的根目录。
public/文件夹包含一个index.php和一个用于Apache的.htaccess文件。
local/文件夹是存储由webservice生成的文件的文件夹,并且应在应用的.gitignore中。目前只有密码文件,但也可以放置包含释放IPs的文件。
src/文件夹是放置您的类的位置。
如果您创建了一个用于向webservice提供数据的类\Minha\ClasseDeDados,您必须按以下方式配置$controllers变量
$controllers['classededados'] = '\Minha\ClasseDeDados';
这样,该类的公共方法将可供消费,大致如下
http://servidor/dir_base/classededados/<metodos>/<parametros>
方法必须是静态的,并且必须返回一个数组或字符串,这些数组或字符串将被格式化为JSON。
您可以请求以下输出格式
- ?f=json - 格式化的JSON,便于人类阅读
- ?f=csv - 适合Excel的CSV
如果没有传递参数,则输出的JSON将没有格式,适合其他系统或JSON解析器。
请注意,$controllers是一个数组,因此您可以定义任何数量的数据源。
测试
您可以通过shell中的teste/teste.sh运行一些测试
它将启动一个内置的PHP服务器并执行一些查询。