TL; DR: Создание API. Нужны разные поля для разных версий. Научите меня, мудрые.Определяющие API-интерфейсы
В настоящее время я пытаюсь найти лучший способ создать версию API. То есть, я хочу иметь URL-адрес /api/v1/projects.json
, который отобразит список проектов с кучей полей и api/v2/projects.json
, чтобы показать список проектов с отдельными полями.
Я думал об этой проблеме около 15 минут, что, вероятно, означает, что все это неправильно. На данный момент у меня есть это в моем app/models/project.rb
файле:
def self.api_fields
{
:v1 => ["name"],
:v2 => ["name", "tickets_count"]
}
end
Тогда я могу использовать это в своих контроллерах API (api/v1/projects_controller.rb
), как это:
def index
respond_with(Project.all(:select => Project.api_fields[:v1]))
end
Это замечательно и работает как я D нравится, но есть, вероятно, лучший способ. Это твоя задача! Поделитесь со мной своими горами API-разработки мудрости.
Бонусные баллы, если вы придумали решение, которое также позволит мне использовать методы для экземпляров объекта модели, например метод tickets_count
по методу Project
.
Это то, что я уже делаю, используя разные контроллеры, чтобы возвращать разные поля. Думаю, эта часть я определенно прибил. Вопрос в том, что «это правильный способ сделать это?». –
Чувствую себя хорошим способом для меня, но именно поэтому я начал отвечать «Просто комментарий»: - Я недостаточно уверен в своей мудрости;). – polarblau
У вас также должна быть структура каталогов для ваших контроллеров API, таких как 'app/controllerlers/api/v2/categories_controller.rb'. – yfeldblum