Hyperf 框架建立 JSON-rpc 服務

Donjan發表於2019-12-03

我們建立一個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 協議》,轉載必須註明作者和本文連結

相關文章