Silexrestful 框架中的格式后缀
Format suffix in Silex restful framework
我正在开始构建一个支持多种响应格式的 RESTful api。我想通过 Accept header 识别请求的响应格式,或者在请求后附加一个文件后缀 url.
例如
/api/endpoint
包括 Accept: application/json*
和
/api/endpoint.json
应该会产生相同的 json 响应。
/api/endpoint.xml
应导致 XML 响应。
我没有在 Silex 中找到任何关于响应格式的文档,那么如何开始以及是否可以允许文件后缀用于格式识别?
谢谢,
帕特里克
示例来自 Silex documentation:
use Silex\Application;
use Silex\Provider\SerializerServiceProvider;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
$app = new Application();
$app->register(new SerializerServiceProvider());
// only accept content types supported by the serializer via the assert method.
$app->get("/pages/{id}.{_format}", function (Request $request, $id) use ($app) {
// assume a page_repository service exists that returns Page objects. The
// object returned has getters and setters exposing the state.
$page = $app['page_repository']->find($id);
$format = $request->getRequestFormat();
if (!$page instanceof Page) {
$app->abort("No page found for id: $id");
}
return new Response($app['serializer']->serialize($page, $format), 200, array(
"Content-Type" => $request->getMimeType($format)
));
})->assert("_format", "xml|json")
->assert("id", "\d+");
要默认获得 json 响应,您可以使用类似于以下内容的内容:
$app->get("/pages/{id}{_separator}{_format}", function (Request $request, $id) use ($app) {
//...
})->assert("id", "\d+")
->value("_separator", ".")
->assert("_separator", "\.|\/")
->value("_format", "json")
->assert("_format", "json|xml");
// /pages/1 => json reponse
// /pages/1.json => json response
// /pages/1.xml => xml response
// /pages/1/json => json response (as a bonus)
// and etc.
另请参阅 documentation 以全局配置此行为。
我正在开始构建一个支持多种响应格式的 RESTful api。我想通过 Accept header 识别请求的响应格式,或者在请求后附加一个文件后缀 url.
例如
/api/endpoint
包括 Accept: application/json*
和
/api/endpoint.json
应该会产生相同的 json 响应。
/api/endpoint.xml
应导致 XML 响应。
我没有在 Silex 中找到任何关于响应格式的文档,那么如何开始以及是否可以允许文件后缀用于格式识别?
谢谢, 帕特里克
示例来自 Silex documentation:
use Silex\Application;
use Silex\Provider\SerializerServiceProvider;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
$app = new Application();
$app->register(new SerializerServiceProvider());
// only accept content types supported by the serializer via the assert method.
$app->get("/pages/{id}.{_format}", function (Request $request, $id) use ($app) {
// assume a page_repository service exists that returns Page objects. The
// object returned has getters and setters exposing the state.
$page = $app['page_repository']->find($id);
$format = $request->getRequestFormat();
if (!$page instanceof Page) {
$app->abort("No page found for id: $id");
}
return new Response($app['serializer']->serialize($page, $format), 200, array(
"Content-Type" => $request->getMimeType($format)
));
})->assert("_format", "xml|json")
->assert("id", "\d+");
要默认获得 json 响应,您可以使用类似于以下内容的内容:
$app->get("/pages/{id}{_separator}{_format}", function (Request $request, $id) use ($app) {
//...
})->assert("id", "\d+")
->value("_separator", ".")
->assert("_separator", "\.|\/")
->value("_format", "json")
->assert("_format", "json|xml");
// /pages/1 => json reponse
// /pages/1.json => json response
// /pages/1.xml => xml response
// /pages/1/json => json response (as a bonus)
// and etc.
另请参阅 documentation 以全局配置此行为。