我的应用程序堆栈包括AngularJs - > Django Rest Framework - > Django的。 我正在我的网站上为文章设计评论应用程序。这些文章链接到主题实体。现在为这些评论编写一个REST后端,我最终得到的结果是 -
/主题/(topic_id)/物品/(article_id的)/评论。
因此,我的观点最终会签名如下:
get(self,requests,topic_id,article_id,format = None)
评论不需要有关于本文所附主题的任何信息,但它具有该信息。 我无法弄清楚这是一个糟糕的REST设计,还是我能在django中以更好的方式做到这一点。
BTW我看了评论应用程序的通用实现。它似乎依赖于模板标签来获取像article_id这样的信息,因为我没有使用django模板,所以我无法使用它。
答案 0 :(得分:1)
您的API设计的很多方式取决于关系的紧密程度。这不是REST问题,也不是Django问题,但它更像是一个url设计问题。
您当前正在使用嵌套网址,其中层次结构的每个部分都包含在网址中,即使它没有用或没必要。通常建议,如果您不需要层次结构的每个部分,它不应该在URL中,并且您的URL将因此变得平坦。 Heroku的API design guide是一个有用的读物,但您必须考虑对您的应用程序的影响以及它是否值得。
评论不需要有关于本文所附主题的任何信息,但它有这些信息。
这是嵌套设计的问题之一,最终会出现深度嵌套的结构,其中包含许多无用的信息。但重要的是要记住,REST与API的URL结构完全无关,但some people do have strong opinions与它们应如何协同工作有关。
如果您希望使用您的网址进行平面搜索,这会从模式中移除topic
和article
,您最终会得到类似以下内容的网址:
/topics/{topic_id}/
/articles/?topic={topic_id}
/articles/{article_id}/
/comments/?article={article_id}
/comments/{comment_id}/
这样您就无需删除网址中的主题以及文章,因此只有最重要的信息才会显示在网址中:评论信息。
Django REST Framework具有great filtering support,可用于制作有用的平面API。