haskel/grpc-web-bundle

gRPC-Web 协议的 Symfony 扩展包

安装: 0

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

类型:symfony-bundle

v0.1.0 2023-08-11 22:25 UTC

This package is auto-updated.

Last update: 2024-09-18 21:00:04 UTC


README

安装

composer require haskel/grpc-web-bundle

将扩展包添加到 config/bundles.php

return [
    // ...
    Haskel\GrpcWebBundle\GrpcWebBundle::class => ['all' => true],
];

配置

# config/packages/grpc_web.yaml

grpc_web:
  # optional namespace of proto files
  proto_namespace: 'my.somenamespace.api'

  # optional name of response type attribute in request object
  response_type_attribute_name: '_grpc_response_type'
  
  # map of exception classes to grpc standard response codes
  exception_code_map:
    App\Exception\ValidationException: 1
    App\Exception\InvalidArgumentException: 2
  
  # configuration of integration with lexik_jwt_authentication bundle
  security:
    # optional class of success response builder
    success_response_builder: 'App\Security\SuccessResponseBuilder'
    # optional class of failure response builder
    failure_response_builder: 'App\Security\FailureResponseBuilder'
    # required class of sign in request
    sign_in_request_class: 'App\Model\Api\SignInRequest'

使用

创建 proto 文件

syntax = "proto3";

package grpc.api;

service PingService {
    rpc Ping (PingRequest) returns (PingResponse) {}
}

message PingRequest {
    string message = 1;
}

message PingResponse {
    string message = 1;
}

生成 PHP 代码

protoc --php_out=src --grpc-web_out=mode=grpcwebtext:src --proto_path=config/proto 

创建控制器

<?php

namespace App\Controller\Grpc;

use App\Grpc\Api\PingRequest;
use App\Grpc\Api\PingResponse;
use Haskel\GrpcWebBundle\Attribute as Grpc;

#[Grpc\Service('PingService', package: 'grpc.api')]
class PingService
{
    public function Ping(PingRequest $request): PingResponse
    {
        $message = $request->getMessage();
        
        $response = new PingResponse();
        $response->setMessage("pong:" . $message);
        
        return $response;
    }
}