bankiru/rpc-server-bundle

此包已被废弃,不再维护。未建议替代包。

RPC服务器symfony扩展包

安装量: 17,694

依赖项: 1

建议者: 0

安全: 0

星标: 1

关注者: 4

分支: 1

开放问题: 2

类型:symfony-bundle

1.2 2016-06-29 06:30 UTC

This package is not auto-updated.

Last update: 2022-11-08 05:06:48 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License

Build Status Scrutinizer Code Quality Code Coverage SensioLabsInsight

HTTP RPC服务器扩展包

此扩展包提供默认控制器实现,用于处理通过HTTP请求到达应用程序的RPC请求

实现

RPC服务器不声明任何实现要求。以下是一些可能的选择

  • JSON-RPC
  • SOAP(扩展XML-RPC)

或其他自定义RPC,它使用方法+参数操作,并为多个方法使用单个端点

HTTP端点

端点是处理基本HTTP请求的HTTP路由,提供初始解析和处理请求数据

要启用HTTP端点,您应通过以下路由配置启用自定义端点路由加载器

# app/config/routing.yml
rpc:
  resource: .
  type: endpoint

资源值不重要,加载路由时忽略它,因为端点是通过配置配置的

配置

基本端点配置如下所示

rpc:
  router:
    endpoints:
      my-public-endpoint:
        path: /
        defaults:
          _controller: JsonRpcBundle:JsonRpc:jsonRpc
          _format: json
        context: Default
        resources:
        - "@MyBundle/Resources/config/service_rpc.yml"

这将在URL /上创建端点,并使用通用的symfony控制器。它还从service_rpc.yml配置文件中预填充方法

my-public-endpoint将成为路由名称,确保它不会与其他路由冲突,直到您想这样做。

方法路由

每个RPC请求都有方法和参数。您可以配置应用程序以处理不同端点上的不同方法,并使用不同的操作

通用配置如下所示

my_bundle:
  resource: "@MyBundle/Rpc/"
  prefix: my_bundle/
  type: annotation

支持不同的资源类型。内置的有

注解

@Method("my-bundle/my-method", context={"private"}, defaultContext=false) 

Yaml

不同的端点实现可能使用不同的控制器名称解析器,因此MyBundle:Test:entity表示法取决于端点。例如,JSON-RPC可能在MyBundle\JsonRpc\TestController中搜索TestController控制器

my-bundle/my-method:
  controller: "MyBundle:Test:entity"
  default_context: true
  context: private

资源

您可以使用前缀和上下文继承将目录、类、文件、yaml配置作为方法源传递

以下链式调用将导致prefix/annotation/sub方法由AnnotationController::subAction处理,上下文为private+default

private:
  resource: jsonrpc_private_nested.yml
  context: private
annotation:
  resource: "@JsonRpcTestBundle/JsonRpc"
  prefix: prefix/
/**
 * Class AnnotationController
 *
 * @package Bankiru\Api\JsonRpc\Test\JsonRpc
 * @Method("annotation/")
 */
class AnnotationController extends Controller
{
    /**
     * @return array
     * @Method("sub")
     */
    public function subAction()
    {
        return [];
    }
}

事件

此扩展包重复通用的symfony请求处理流程。您可以将扩展钩入给定系统事件

  • rpc.request在处理RPC调用时触发
    • 路由在这里发生
  • rpc.controller触发以过滤控制器(例如,允许安全过滤)
  • rpc.response在端点处理器获取响应时触发
  • 当控制器返回的响应不是RpcResponseInterface的实例时,将触发rpc.view
  • 在RPC调用处理过程中抛出异常时,将触发rpc.exception
  • 使用rpc.finish_request在返回到HTTP控制器之前最终化RPC响应。

RPC控制器实现

实现控制器的主要目标是扩展抽象的RpcController,将RequestInterface和端点名称传递到getResponse方法中。

RequestInterfaceRpcRequestInterface的扩展,具有额外的属性,允许携带请求元数据。

通用的解决方案是将传入的symfony Request实例转换为你的RequestInterface实现(即从XML-RPC或JSON-RPC请求中提取方法和参数)并发送序列化的响应,将RpcResponseInterface转换回你的响应对象。

您还可以通过通用的symfony视图事件处理自动将RpcResponseInterface转换为你的序列化响应。