在如下的多对多场景中,最佳的控制器结构建模方式是什么?
假设我们有与标签相关联的博客文章。 一篇博客文章可以有多个标签,并且一个标签可以分配给很多博客文章。 博客文章和标签都属于客户。 我的第一个问题是如何通过以下(标准?)终端设计来更新博客文章。
GET - /api/posts/{id} => Load the post by id
DELETE - /api/posts/{id} => Delete the post by id
POST - /api/posts/ => Create a new post from the JSON in the body
PUT - /api/posts/{id} => Update the post from the JSON in the body. Tags as well
1.) 把标签放在数组中 [{"name":"tag1"}, {"name":"tag2"}]
并让服务器找出这些标签是否已经存在于客户端,然后将它们分配到创建博客文章的过程中,这是一种好的实践吗?
在“断开式”网络世界中,先创建帖子,然后再创建/分配任务不太合适。
2.) 更新过程基本上与此类似。把整个对象PUT上去,让服务器自己尝试更新,这是一种好的做法吗?
目前,我已经使用上面提到的工具链实现了这个“基本”场景。但是这个解决方案已经感觉相当复杂了。特别是手动调整和设置多对多关联使事情变得比应该更加复杂。
现在当涉及到并发处理时,我并不确信在“断开式”场景下处理所有这些都很容易,因为所有东西都来自客户端,服务器需要找出所有情况。
那么从API的角度来看,这个(简单?)场景的“正确”实现是什么呢?将实体创建/更新拆分开来可能更容易吗?但是我会问自己如何绑定不同的请求,以便服务器可以知道2个或更多请求属于1个创建/更新。
希望有人能读到这里,并能理解我的混乱思路。