RESTful API的客户端应用程序 - 理查森成熟度模型 - 正确的方法

时间:2014-01-24 15:33:19

标签: php api rest symfony client

上下文,

我正在使用Symfony2处理RESTfull API(我的API实现主要基于FOSRestBundleSerializer,我还介绍了Hateoas以便达到{{3}的  the third LevelRichardson Maturity ModelLevel 1完全受到尊重)。

我的问题,

我的问题与我的#34; Symfony2"客户端应用程序,我使用2来请求我的API,但我正在努力管理资源之间的关系。

让我们更清楚,这是一个相关的例子,

让我们说resource Aresource B相关,我正在研究的主要客户端功能是创建新的资源A,但是创建A还意味着创建相关的B resource。 客户端应用程序应定位具有以下签名/路由的API方法:<POST> /api/resourceA

但是,由于创建A需要创建B并将其与A相关联,因此我应该使用&#34; <POST> /api/resourceB&#34;然后使用该链接调用相关的201 GET方法获取B resource(或从{{1}获取),然后使用链接resource B获取Id响应响应)。将标识符添加到相关的POST,然后可以调用我的ressource A(新)方法。

这种方法看起来太乏味了,我想知道我是否遗漏了一些东西。我不想违反Guzzle libraryLevel 1,我希望能够轻松管理资源之间的关系。

有没有人对我应该这样做的方式有所了解?

TL; DR

总而言之,我的约束是,

  • 我要求一个资源
  • 不打电话创建A会自动创建B
  • 唯一暗示资源之间关系的调用由Hateaous链接引入(在GET上,作为PUT / POST响应的一部分)

所以我目前的方法(基于这些限制)是,

  • POST以创建B
  • 获取B标识符并将其与A
  • 相关联
  • POST以创建A
  • 如果创建A失败
  • 删除B

执行REST时的最佳做法是&#34;一个资源的一个操作&#34;,所以换句话说,我的问题是:

  • 是否有成熟的捆绑/库/工具(围绕Symfony2)提供了一个抽象层来管理Rest API提供的资源之间的关系?
  • 我欢迎任何有关我应该管理的方式的建议或反馈。

1 个答案:

答案 0 :(得分:0)

如果你总是用B创建A(没有B就不能创建A),那么你就是一个复杂的资源。所以最好的方法是使用<POST> /api/resourceAB