我编写了一个简单的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
答案 0 :(得分:1)
执行:
constraints subdomain: 'api' do
scope module: :api do
namespace :v1 do
你不想命名空间json或xml,它没有意义:相同的控制器应该处理两个请求,只是格式问题。
使用respond_to