jdesrosiers / silex-conneg-provider
一个提供HTTP内容协商工具的silex服务提供商。
v1.0.0
2016-06-06 05:58 UTC
Requires
- silex/silex: ~2.0
Requires (Dev)
- jdesrosiers/silex-jms-serializer-provider: ~1.0
- phpunit/phpunit: ~3.7
- symfony/browser-kit: ~2.3
- symfony/serializer: ~2.3
Suggests
- jdesrosiers/silex-jms-serializer-provider: Use the conneg service to serialize responses and deserialize requests using JMS Serializer.
- symfony/serializer: Use the conneg service to serialize responses and deserialize requests using the Symfony Serializer Component.
This package is auto-updated.
Last update: 2024-08-26 03:21:21 UTC
README
该silex-conneg-provider是一个silex服务提供商,它提供了在您的应用程序中进行HTTP内容协商的工具。它允许您声明应用程序可以处理哪些请求和响应格式。如果客户端请求一个应用程序不支持格式的响应,他们将收到一个406 Not Acceptable
响应。如果客户端发送一个应用程序不支持格式的请求体,他们将收到一个415 Unsupported Media Type
响应。还有一个服务,可以方便地自动序列化响应和反序列化请求,使用JMS Serialzier或Symfony Serializer。
安装
使用composer安装silex-conneg-provider。该项目使用语义化版本控制。
{ "require": { "jdesrosiers/silex-conneg-provider": "~1.0" } }
参数
内容协商
- conneg.responseFormats: (数组) 支持的响应格式数组。默认为
array("html")
- conneg.requestFormats: (数组) 支持的请求格式数组。默认为
array("form")
序列化
- conneg.defaultFormat: (字符串) 默认为
html
- conneg.serializationContext: (JMS\Serializer\SerializationContext或数组)。可选。
- conneg.deserializationContext: (JMS\Serializer\DeserializationContext或数组)。可选。
服务
- conneg: 提供一个具有两个方法的对象:createResponse和deserializeRequest。此服务仅在您已安装序列化服务时可用。
- createResponse: 它的工作方式与
Respose::create
相同,但它接受一个对象而不是字符串,并将其序列化为所需的格式。格式由该服务提供商包含的中间件确定。 - deserializeRequest: 传递一个类名,它将反序列化请求实体,并返回该类的实例。
注册
$app->register(new JDesrosiers\Silex\Provider\ContentNegotiationServiceProvider(), array( "conneg.responseFormats" => array("json", "xml"), "conneg.requestFormats" => array("json", "xml"), "conneg.defaultFormat" => "json", ));
用法
服务提供商添加了中间件,自动执行所有内容协商头验证,并在无法处理请求时适当地响应。您可以使用Request::getRequestFormat
方法获取中间件确定的响应格式。
$request->getRequestFormat($defaultFormat);
序列化器用法
conneg
服务提供了一些自动序列化响应和反序列化请求的辅助函数。此功能在您可以通过$app["serializer"]
访问JMS Serialzier或Symfony Serializer的实例时可用。您可以从jdesrosiers/silex-jms-serializer-provider获取JMS Serializer,或从silex内置的SerializerServiceProvider
获取Symfony Serializer。
$app->post("/foo", function (Request $request) use ($app) { // deserializeRequest takes the class name of a JMS Serializer annotated class and will deserialize // the request entity and give you back an instance of that class. $requestData = $app["conneg"]->deserializeRequest("FooRequest"); $response = Foo::create($requestData); // createResponse works just like Respose::create, but takes a JMS Serializer annotated object // instead of a string and serializes it to the format the user requested. return $app["conneg"]->createResponse($response, 201, array( "Location" => "/foo/1234", )); });