0

我编写了一个简单的 API,但路由和 API 感觉有些不对劲。这是我第一次编写 API,而仅仅几个月就编写了 ROR 代码。看看下面的代码,帮我把它理顺!!

我希望 API 能够响应https://api.xxxxx.com/v1/xm ​​l? username=u_name&password=passwd& to=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
4

1 回答 1

1

做:

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

您宁愿不使用命名空间 json 或 xml,这没有任何意义:相同的控制器应该处理这两个请求,只是格式问题。Rails 使它变得非常容易respond_to

于 2013-09-29T20:32:45.390 回答