使用子域路由API

时间:2013-09-29 20:28:39

标签: ruby-on-rails

我编写了一个简单的API,但是路由和API有些不对劲。这是我第一次编写API,只用了几个月编写ROR代码。看看下面的代码并帮我理顺!!

我希望API能够响应https://api.xxxxx.com/v1/xml?username=u_name&password=passwd&至= xxxxx& from = xxxx& message = text

等请求

子域似乎也不起作用;

路线

  namespace :api, :path => "", constraints: {subdomain: 'api'} do
namespace :v1  do
  namespace :json, defaults: {format: :json} do
    resources :messages
    resources :balance
  end

  namespace :xml, defaults: {format: :xml} do
    resources :messages
    resources :balance
  end

end

end

这些是json API的控制器

消息控制器:

class Api::V1::Json::MessagesController < ApplicationController
before_filter :authenticate


def show

end

def create
    @user = current_user
    @message = Message.new(params[:message])
    if @message.save
      MessageWorker.perform_async(@message.id, lists, current_user.id)
      render json: {status: "success", to: @message.count, from: @message.from, 
                    balance: @user.balance, message: @message.message}, 
                    time: @message.created_at} 
    else
       render status: 400 
    end
end


def authenticate
    authenticate_or_request_with_http_basic do |username,password|
      resource = User.find_by_email(username)
      if resource.valid_password?(password)
        sign_in :user, resource
      end
    end
end

end

平衡控制器:

class Api::V1::Json::BalanceController < ApplicationController
before_filter :authenticate


def show
    @balance = current_user.balance
    render json: {user: current_user.name.titleize, balance: "#{current_user.currency}: #{@balance}"}

end

def authenticate
    authenticate_or_request_with_http_basic do |username,password|
      resource = User.find_by_email(username)
      if resource.valid_password?(password)
        sign_in :user, resource
      end
    end
end

end

1 个答案:

答案 0 :(得分:1)

执行:

constraints subdomain: 'api' do
  scope module: :api do
    namespace :v1 do

你不想命名空间json或xml,它没有意义:相同的控制器应该处理两个请求,只是格式问题。 使用respond_to

,Rails非常简单