usox / hypersonic
创建与亚音速协议兼容的API后端
Requires
- php: ^8.3
- ext-mbstring: *
- aaronddm/xml-builder: ^2.0
- psr/http-message: ^2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- mockery/mockery: ^1.5
- phpstan/phpstan: ^1.5
- phpstan/phpstan-mockery: ^1
- phpstan/phpstan-strict-rules: ^1
- phpunit/phpunit: ^11
- rector/rector: ^1
README
一个构建遵循subsonic API定义的API的库。
处于开发阶段;目前只支持一组方法
使用方法
先决条件
- PHP 8.1
- 遵守PSR规范的请求流(例如,使用Slim等框架)
- 应用程序中免费的
/rest/
路由(遗憾的是目前无法更改)
安装
composer require usox/hypersonic
初始化
初始化的一部分是定义所有可用的API方法。每个方法都需要一个实现了DataProviderInterface的类。这些接口声明了数据需要以何种格式构建才能通过API提供。
还需要一个AuthenticationProvider来为API提供认证机制。有关详细信息,请参阅认证。
use Usox\HyperSonic\FeatureSet\V1161\FeatureSetFactory;
$hyperSonic = HyperSonic::init(
new FeatureSetFactory(),
new MyAuthenticationProvider(), // implements AuthenticationProviderInterface
[
'ping.view' => fn () => new MyPingClass(), // implements PingDataProviderInterface
'getLicense.view' => fn () => new MyLicenseClass(), // implements LicenseDataProviderInterface
'getArtists.view' => fn () => new MyArtistListClass(), // implements ArtistListDataProviderInterface
...
],
);
API路由
简单地将创建的Hypersonic用作/rest/*
路由的路由处理程序 - 例如,当使用Slim时
$app = AppFactory::create();
$app->get('/rest/{methodName}', $hyperSonic);
认证
警告
在安全性方面,subsonic协议有些马虎。在版本1.13.0
之前,协议期望用户名和密码作为查询字符串的一部分发送 - 密码本身以明文或十六进制编码的形式传输。
从1.13.0
开始,协议增加了对访问令牌的支持 - 由密码和盐(也添加到查询参数中)组成的md5散列。尽管md5被认为是不安全的散列算法,但它比之前要好得多。遗憾的是,一些支持该协议的应用程序仍然使用旧的认证机制(或两者都使用)。
因此,Hypersonic也支持两种方式,我强烈建议不要在您的服务器应用程序中存储用于API认证的用户密码。请考虑仅使用用于API的用户密码的单独API密钥/令牌。这样,在发生安全漏洞的情况下,您可以降低与安全相关的任何影响。
还要考虑不要实现可能访问敏感数据或修改服务器数据的方法(例如,开始音乐文件夹扫描)。
认证提供程序
AuthenticationProviderInterface
期望实现两个方法,一个是令牌认证,另一个是用户名+密码认证。
要检查令牌,请使用用户的API密钥(或者,为了上帝的爱,使用明文用户密码),添加盐并对其进行md5散列。
协议版本
有关详细信息,请参阅官方的subsonic API文档。
1.16.1 - 当前支持的方法
- getAlbum.view
- getAlbumList2.view
- getArtists.view
- getArtist.view
- getCoverArt.view
- getGenres.view
- getLicense.view
- getMusicFolders.view
- getRandomSongs.view
- getStarred2.view
- ping.view
- stream.view