Hyperf 框架创建 JSON-rpc 服务
我们创建一个User服务供其他服务调用以实现认证和鉴权。
创建文件UserService.php
checkToken 方法接收两个参数,一个token,一个permission,首先验证token获得user,对user的鉴权将在以后的权限认证教程补充。
如果认证成功,将返回user.
在配置文件server.php增加一个json-rpc服务,监听端口为9504
[
'name' => 'jsonrpc-http',
'type' => Server::SERVER_HTTP,
'host' => '0.0.0.0',
'port' => 9504,
'sock_type' => SWOOLE_SOCK_TCP,
'callbacks' => [
SwooleEvent::ON_REQUEST => [Hyperf\JsonRpc\HttpServer::class, 'onRequest'],
],
],
用postman测试服务,我的接口地址 http://192.168.137.200:9504
post 请求
{"jsonrpc":"2.0","method":"/user/checkToken","params":["eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI1ZGNhM2RjZjE2NDQzIiwiaWF0IjoxNTczNTM1MTgzLCJuYmYiOjE1NzM1MzUxODMsImV4cCI6MTU3MzU0MjM4MywidXNlcl9pZCI6MX0.s0_ADx2399sIajxHW_-LnQY7ftbVhH1qEFbRT60qNYA",[]],"id":"1"}
正确返回
{
"jsonrpc": "2.0",
"id": "1",
"result": {
"user_id": 1,
"username": "admin",
"nick_name": "超级管理员",
"real_name": "超级管理员",
"sex": 0,
"phone": "",
"avatar": "",
"last_login_at": null,
"created_at": "2019-11-04 15:16:18",
"status": 1
}
}
错误返回
{
"jsonrpc": "2.0",
"id": "1",
"error": {
"code": -32000,
"message": "Token未验证通过",
"data": {
"class": "Phper666\\JwtAuth\\Exception\\TokenValidException",
"message": "Token未验证通过"
}
}
}
这里可能有人会有疑问,这个服务是公开的,是不是谁都可以调用,答案肯定是否定的,我们的服务将部署在Docker私有网络,外部是无法访问到的,这个后面会讲到。
博客:《PHP 微服务练兵》系列教程
本作品采用《CC 协议》,转载必须注明作者和本文链接