Angularjs 符号与角度应用
我有SF2应用程序和AngularJS客户端 当我创建一些项目时,symfony返回Angularjs 符号与角度应用,angularjs,symfony,fosrestbundle,hateoas,Angularjs,Symfony,Fosrestbundle,Hateoas,我有SF2应用程序和AngularJS客户端 当我创建一些项目时,symfony返回http201状态,这意味着项目已创建 而且。。。我想知道这个项目的ID,或者更好的路线到这个项目。因此,当我创建一些东西时,我希望返回http201 status和Location:http://my-app.dev/created-item/{id}和访问控制公开头:位置头 当然,我可以创建新的响应并添加此标题。但我必须在控制器中的任何createAction中执行此操作 是否有某种方法可以在成功发布请求后将
http201状态
,这意味着项目已创建
而且。。。我想知道这个项目的ID,或者更好的路线到这个项目。因此,当我创建一些东西时,我希望返回http201 status
和Location:http://my-app.dev/created-item/{id}
和访问控制公开头:位置
头
当然,我可以创建新的响应并添加此标题。但我必须在控制器中的任何createAction
中执行此操作
是否有某种方法可以在成功发布请求后将此标题自动添加到任何201响应中
或者我的想法是错误的,应该采取其他措施?这可以通过支持REST API来实现 什么是HATEOAS? 基本上,
HATEOAS
所做的是自动向API返回的每个资源添加URI
调用HATEOAS时基于HATEOAS的响应示例http://localhost:8080/api/customers
将是:
[{
"name": "Alice",
"links": [ {
"rel": "self",
"href": "http://localhost:8080/api/customers/1"
} ]
}]
use JMS\Serializer\Annotation as Serializer;
use Hateoas\Configuration\Annotation as Hateoas;
/**
* @Serializer\XmlRoot("customer")
*
* @Hateoas\Relation("self", href = "expr('/api/customers/' ~ object.getId())")
*/
class Customer
{
private $id;
private $name;
...
}
这将返回所有客户以及每个客户到该客户资源的自链接URI
如何在SF2中使用HATEOAS?
您可以使用和JMSSerializerBundle
的组合将其集成到Symfony2中
您的关系(到资源的链接)可以在XML
、YAML
、PHP
或注释中配置。带有注释的示例如下:
[{
"name": "Alice",
"links": [ {
"rel": "self",
"href": "http://localhost:8080/api/customers/1"
} ]
}]
use JMS\Serializer\Annotation as Serializer;
use Hateoas\Configuration\Annotation as Hateoas;
/**
* @Serializer\XmlRoot("customer")
*
* @Hateoas\Relation("self", href = "expr('/api/customers/' ~ object.getId())")
*/
class Customer
{
private $id;
private $name;
...
}
有关更多详细信息,请参阅
我自己从来没有使用过这个,但是根据,bazinghateoasbundle
构建在JMSSerializerBundle
的基础上,为序列化对象自动生成链接和嵌入对象,因此您不需要做任何其他事情
结论:在POST
请求中创建新项目时,返回创建的项目bazingaateoasbundle
将自动将该项的URI/路由添加到响应中。对SF2使用REST
bundle,如。我使用它。但是它没有添加这个标题。您可能想让RESTAPI支持HATEOAS
,看看这个。另请参见。重定向有自己的返回代码集。因此,不能在同一个响应中同时返回201和301。你可能无论如何都不想去。