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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!