2013-09-25 4 views
1

У меня есть API на основе Rails 4, который использует Devise для аутентификации и требует user_token и user_email для каждого аутентификации api. Переданные учетные данные основаны на пользователе, использующем приложение в то время.Как передать дополнительные параметры с каждым вызовом api, используя Spine.js 'Ajax Integration?

Я использую Spine.js для своего внешнего интерфейса и хотел бы посоветовать, как лучше всего включить эти дополнительные параметры в каждый вызов AJAX, сделанный клиентской стороной.

В корешка, у меня есть модель Session, которая сохраняющееся (на локальном диске) необходимые данные, возвращаемые мой API, когда пользователь входит в систему.

Несколько подходов приходила мне в голову ...

Через @url собственность, но я должен был бы это исправить, чтобы работать в каждой модели, как так ...

class User extends Spine.Model 
    @configure 'User', 'name', 'email', 'image_url' 
    @extend Spine.Model.Ajax 

    @url: '#{Spine.model.host}/users/?user_token=foo&user_email=bar' 

... может быть более подходящим методом было бы создать базовую модель, которая расширяет метод @url и добавляет эти параметры каждый т IME. Каждая из моих других моделей могла бы потом наследовать от этой базовой модели до DRY.

Как и выше, я мог бы расширить каждую из функций модели, которые я использую для добавления этих дополнительных параметров каждый раз, когда выполняется вызов API. Например, я мог бы рассмотреть возможность расширения функции @fetch(). Что-то вроде этого ...

class User extends Spine.Model 
    @configure 'User', 'name', 'email', 'image_url' 
    @extend Spine.Model.Ajax 

    @fetch (params) -> 
    params or= 
     data: {user_token: 'foo', user_email: 'bar'} 
     processData: true 

    super(params) 

Или моя третья мысль о том, могу ли я продлить Spine.Model.Ajax, чтобы добавить свой дополнительный Params к концу каждого апи вызова, абстрагируясь от Моделей полностью, так что я не нужен продлевать любого функций модели или даже использовать свойство @url, потому что по умолчанию он работает так, как мне это нужно, за исключением этих дополнительных учетных данных, которые мне нужно отправить.

В качестве альтернативы мой подход может быть совершенно неправильным, и я мог бы пропустить что-то гораздо более простое (надеюсь, так).

Отказ от ответственности: я не тестировал ни один из вышеуказанных кодов, просто записал его во время моего мыслительного процесса.

Пример одного из моих HTTP вызовов (в разработчике, в данное время) составляет: http://dev.myapp.com:5000/api/v1/posts?user_token=foobar&[email protected]

+0

Итак, если я правильно понимаю, вы просто хотите добавить дополнительные параметры, чтобы перейти на задний план, когда вы совершаете вызов AJAX? Можете ли вы привести пример HTTP-звонка, который вы хотите сделать? Ваша третья идея, вероятно, была бы самой простой и самой RESTful? Конечно, легко добавить параметры в код просмотра. – Beartech

+0

@Beartech да, это правильно, мне просто нужно добавить все мои вызовы с этими двумя дополнительными параметрами. Я только после некоторого совета по лучшему методу сделать это с помощью Spine без необходимости писать пользовательские функции для всех моих классов. Я хочу как можно больше использовать функции фреймворков, предоставляемые в API-интерфейсе модели: [http://spinejs.com/api/models](http://spinejs.com/api/models) – Pete

ответ

1

Я подошел к этой проблеме с помощью $.ajaxSetup() функции JQuery, что я наткнулся на другой день. Мой код выглядит так:

settings = 
     data: 
      user_email:'[email protected]' 
      user_token:'foobar' 

$.ajaxSetup settings 

Я обязан это к «создать» событие на моей модели Session в позвоночнике, так что это вызывается, как только сессия была сохранена в Local Storage. Таким образом, мои исходящие вызовы AJAX добавляются вместе с дополнительными параметрами данных, которые мне нужно отправить.

 Смежные вопросы

  • Нет связанных вопросов^_^