簡単な 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