bankiru / rpc-server-bundle
RPC服务器symfony扩展包
Requires
- php: ~5.5 || ~7.0
- doctrine/annotations: ~1.2
- scaytrase/rpc-common: ~1.0
- symfony/config: ~2.7 || ~3.0
- symfony/console: ~2.7 || ~3.0
- symfony/dependency-injection: ~2.7 || ~3.0
- symfony/http-kernel: ~2.7 || ~3.0
- symfony/yaml: ~2.7 || ~3.0
Requires (Dev)
- nelmio/api-doc-bundle: ~2.9
- phpunit/phpunit: ~4.8 || ~5.1
- symfony/browser-kit: ~2.7 || ~3.0
- symfony/routing: ~2.7 || ~3.0
Suggests
- nelmio/api-doc-bundle: For RpcApiDoc extraction
This package is not auto-updated.
Last update: 2022-11-08 05:06:48 UTC
README
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
方法中。
RequestInterface
是RpcRequestInterface
的扩展,具有额外的属性,允许携带请求元数据。
通用的解决方案是将传入的symfony Request
实例转换为你的RequestInterface
实现(即从XML-RPC或JSON-RPC请求中提取方法和参数)并发送序列化的响应,将RpcResponseInterface
转换回你的响应对象。
您还可以通过通用的symfony视图事件处理自动将RpcResponseInterface
转换为你的序列化响应。