我正在使用NodeJS开发一个restful API。为了让您对我的应用程序有更多了解:
我的应用程序有调查。调查包含问题,反过来又有选择。
要添加问题,您需要在帖子正文中提供调查的ID。要添加选项,您需要提供问题的ID。
现在为API路线。什么会更好:
选项1
选项2
最后一个看起来更合乎逻辑,因为我不需要在帖子正文中提供父级的id。
用作端点的最佳做法是什么?
答案 0 :(得分:2)
我认为没有最好的做法"两者之间;相反,它是关于为您的应用程序提供最有意义的界面。如果您通常会在每个部门的基础上访问调查,那么#2最有意义,并且在根据每个调查访问问题方面也是有意义的。如果你想要消除每个部门的部分,你可以做一些上述的混合:
如果您希望按部门进行操作,我会更改#2,以便代替/ api / departments / survey进行/ api / departments / department_id /调查...
但是在不了解应用程序的情况下,很难知道最佳答案是什么。
答案 1 :(得分:1)
调查是否包含除问题之外的任何内容?除了选择之外,问题还包含什么我问的原因是,如果两者的答案都是肯定的,那么我实际上更喜欢这样的事情:
/api/departments/
#返回部门列表/api/departments/<survey-id>/
#返回问题列表/api/departments/<survey-id>/<question-id>/
#返回选项列表/api/departments/<survey-id>/<question-id>/<choice-id>
#返回选项列表或其他相似之处。基本上,我喜欢保持&#34;容器&#34;的概念。和&#34;数据&#34;刚性。我喜欢把它想象成一个文件系统。
因此,如果概念在&#34; s&#34;中结束,那么它就是一个容器(并且我希望路径以&#34; /&#34;结束;它就像一个文件夹,但那就是一个文件夹。
任何访问&#34; /&#34;导致该索引处的元素,当然可以是另一个容器。与文件系统中的目录结构类似。例如,如果我将它们放在文件系统中,我可能会想出这样的东西:
+ /api/departments/
|-----------------/human-resources/
|---------------/survery-10/
|----------/choice-10
答案 2 :(得分:1)
选择取决于资源是否由更高级别的资源拥有或共享;是否要删除级联。如果拥有(使用级联删除),请选择选项2,如果共享,请选择选项1.
如果调查被删除,我想您想删除所有问题和选项(级联删除)。这与选项2完全匹配,因为如果删除资源/ api / departments / departmentid / surveys / surveyid ,您自然也会删除所有子资源/ api / departments / departmentid / surveys / surveyid / questions / ....
另一方面,如果您希望选项在多个调查之间分享问题并在多个部门之间共享调查,那么选项1会更好。
当然,如果拥有某些资源类型而其他资源类型是共享的,您还可以混合使用选项1和选项2。