创建接收参数的服务的正确方法是什么?
目前我在使用ruby on rails上的API:
module Api
module V1
class UsersController < ActionController::API
def index
users = User.order('created_at');
render json: {status: 'Success', message: 'Loaded users', users: users},statu: :ok
end
def show
user = User.find(params[:id])
render json: user, statu: :ok
end
end
end
end
当我尝试使用此url(localhost:3000 / api / v1 / users / 1)使用这个url(localhost:3000 / api / v1 / users / 1)来获取用户时,我只获得了一条预期的记录,但是当我使用postman设置参数时(创建这个url localhost:3000 / api / v1 / users?id = 1)我收回所有记录。
我有这些路线:
Rails.application.routes.draw do
namespace 'api' do
namespace 'v1' do
resources :users
resources :messages
resources :conversations
end
end
end
我是否必须为此案例创建其他路线?
答案 0 :(得分:2)
/api/v1/users/1
与
相同/api/v1/users?id=1
从rake routes
可以看出:
api_v1_users GET /api/v1/users(.:format) api/v1/users#index
POST /api/v1/users(.:format) api/v1/users#create
new_api_v1_user GET /api/v1/users/new(.:format) api/v1/users#new
edit_api_v1_user GET /api/v1/users/:id/edit(.:format) api/v1/users#edit
api_v1_user GET /api/v1/users/:id(.:format) api/v1/users#show
PATCH /api/v1/users/:id(.:format) api/v1/users#update
PUT /api/v1/users/:id(.:format) api/v1/users#update
DELETE /api/v1/users/:id(.:format) api/v1/users#destroy
api/v1/users/1
将转到api/v1/users#show
。 api/v1/users?id=1
将使用参数api/v1/users#index
路由到{'id'=>'1'}
。
因此,路由完全按照预期发生。
我不确定你会创造什么'其他路线'。但你可以做:
module Api
module V1
class UsersController < ActionController::API
def index
if params[:id]
user = User.find(params[:id])
render json: user, status: :ok
else
users = User.order('created_at');
render json: {status: 'Success', message: 'Loaded users', users: users}, status: :ok
end
end
def show
user = User.find(params[:id])
render json: user, status: :ok
end
end
end
end
但是,这真的很丑陋而且非常可怕。
最好在iOS(swift)中正确格式化您的网址。