gpt4 book ai didi

javascript - Backbone.js 和 Backbone 实现的最佳 URL 结构

转载 作者:行者123 更新时间:2023-12-04 20:00:40 24 4
gpt4 key购买 nike

我正在为测验应用程序开发一个 RESTful API,它将使用 Backbone.js 和 Marionette 构建。我对 backbone 很陌生,想知道最好的 URL 结构是什么。我有以下资源:

  • 回答,
  • 包含答案的问题,
  • 包含问题的问题组,
  • 包含问题组的测验。

我想到了两种可能的 URL 结构:

  • GET/quizzes/:id
  • GET/quizzes/:id/questiongroups
  • GET/quizzes/:id/questiongroups/:id
  • GET/quizzes/:id/questiongroups/:id/questions
  • GET/quizzes/:id/questiongroups/:id/questions/:id
  • GET/quizzes/:id/questiongroups/:id/questions/:id/answers

或:

  • GET/quizzes/:id
  • GET/quizzes/:id/questiongroups
  • GET/questiongroups/:id
  • GET/questiongroups/:id/questions
  • ...

现在,我一直在尝试使用这两个选项。对于第一个,我不知道如何将集合定义为 Backbone 中父模型的属性,以便我可以对它们使用 fetch()。第二个选项的问题有点不同:据我了解,Backbone 从其集合中派生模型的 url,但该集合是另一个资源的子项,而获取单个资源的 url 使用另一个集合,即全局资源集。

我很确定在这两种情况下我都必须重写 url()。我尝试了一些东西,但根本没有想出任何可用的东西。此外,我不想覆盖应用程序中的每个 url() 模型,更改 API 结构以适应 Backbone 的偏好对我来说似乎是更好的选择。

任何关于用 Backbone 做这件事的正确方法的指示都会很棒!

谢谢

最佳答案

如果 questiongroup 只能出现在单个 quiz 中,那么第一个选项(分层选项)是显而易见的选择。为了遵守 RESTful 约定,您可能需要考虑使用单数名词:/quiz/:id/questiongroups/:id/question/:id/answer/:id

为了解决您的抓取问题,我建议按照以下答案使用嵌套 Backbone 模型:https://stackoverflow.com/a/9904874/1941552 .我还添加了一个厚脸皮的小 parentModel 属性。

例如,您的 QuizModel 可能看起来像这样:

var Quiz = Backbone.Model.extend({

urlRoot: '/quiz/', // backbone appends the id automatically :)

defaults: {
title: 'My Quiz'
description: 'A quiz containing some question groups.'
},

model: {
questionGroups: QuestionGroups,
},

parse: function(response){
for(var key in this.model){
var embeddedClass = this.model[key];
var embeddedData = response[key];
response[key] = new embeddedClass(embeddedData, {
parse:true,
parentModel:this
});
}
return response;
}
});

然后,您的 QuestionGroups 模型可以具有以下 url() 函数:

var QuestionGroups = Backbone.Model.extend({

// store metadata and each individual question group

url: function() {
return this.parentModel.url()+'/questiongroup/'+this.id;
}

});

或者,如果您不需要存储任何元数据,您可以使用 Backbone.Collection:

var QuestionGroups = Backbone.Collection.extend({

model: QuestionGroup,

url: function() {
return this.parentModel.url()+'/questiongroup/'+this.id;
}

});

恐怕我还没有测试过这些,但我希望它无论如何都有用!

关于javascript - Backbone.js 和 Backbone 实现的最佳 URL 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18512110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com