У меня есть 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]
Итак, если я правильно понимаю, вы просто хотите добавить дополнительные параметры, чтобы перейти на задний план, когда вы совершаете вызов AJAX? Можете ли вы привести пример HTTP-звонка, который вы хотите сделать? Ваша третья идея, вероятно, была бы самой простой и самой RESTful? Конечно, легко добавить параметры в код просмотра. – Beartech
@Beartech да, это правильно, мне просто нужно добавить все мои вызовы с этими двумя дополнительными параметрами. Я только после некоторого совета по лучшему методу сделать это с помощью Spine без необходимости писать пользовательские функции для всех моих классов. Я хочу как можно больше использовать функции фреймворков, предоставляемые в API-интерфейсе модели: [http://spinejs.com/api/models](http://spinejs.com/api/models) – Pete