Если вы внедряете API, вы можете подумать о создании отдельного приложения Rack, которое затем монтируется в «/api/1.0 / ...» и разделяет ваши модели.
Таким образом, вы не привязываете себя к тому, что ваш API напрямую связан с вашими общедоступными маршрутами, что может быть сложно создать для пользователя API.
Хорошим подходом будет создание простогоПриложение Sinatra, которое предоставляет только те методы, которые вам нужны, а затем создает отдельную стратегию аутентификации:
require 'sinatra'
require 'active_support' # all the Rails stuff
require 'lib/user' # your User class
require 'sinatra/respond_to' # gem install sinatra-respond_to
Sinatra::Application.register Sinatra::RespondTo
use Rack::Auth::Basic, "API", do |username, password|
User.find_by_login(username).valid_password?(password)
end
get '/api/1.0/posts' do
@posts = Post.recent # assuming you have a Post model...
respond_to do |wants|
wants.xml { @posts.to_xml }
wants.to_json { @posts.to_json }
end
end
get '/api/1.0/users/:id' do
@user = User.find_by_login(params[:id])
# Careful here - don't release personal details!
respond_to do |wants|
wants.xml { @user.to_xml }
wants.to_json { @user.to_json }
end
end
Управление версиями вашего API с «1.0» (или аналогичным) в пути означает, что если вы измените свойВ моделях вы можете создать новую версию своего API, не нарушая существующий код ваших пользователей.
Используя это, вы сможете разрешить пользователям проходить аутентификацию с помощью HTTP Basic в форме:
curl -u steven:password http://example.com/api/1.0/users/steven.xml
curl -u steven:password http://example.com/api/1.0/users/steven.json
curl -u steven:password http://example.com/api/1.0/posts.xml
Чтобы запустить это, сохраните его как 'api.rb', и либо запустите его как промежуточное программное обеспечение стойки, либо создайте файл 'config.ru' следующим образом:
require 'api'
run Sinatra::Application
А затем из этого каталога:
rackup