Bonjour,
Je réalise actuellement une API avec rails et sur certaines URLs je souhaiterais mettre des paramètres obligatoire
Actuellement je fais des tests pour me faire la main avant d'implémenter tout ça sur la vrai API et voici ce que j'ai:
class Api::PostsController < ApplicationController
def index
@posts = Post.all
render json: posts: @posts
end
def create
@post = Post.new(create_params)
if @post.save
render json: @post, status: :created
else
render json: @post.errors, status: :unprocessable_entity
end
end
private
def create_params
params.require(:title)
params.require(:content)
params.permit(:title, :content)
end
end
Le soucis étant que s'il manque un paramètre j'ai le drois à une jolie erreur rails (en html), pour débugger c'est bien mais pour les clients qui vont communiquer un peu moins. Du coup je me demandais s'il y a un moyen de changer le format de réponse lors d'un *param is missing.
Merci d'avoir pris le temps de me lire,
Cordialement,
TD
Tu peux récupérer l'exception, et avec elle tu aura les informations : http://api.rubyonrails.org/classes/ActiveSupport/Rescuable/ClassMethods.html
Quand tu met en environnement de production tu ne vois pas les erreurs mais tu sera dirigé vers une page d'erreur que tu peux personnaliser. C'est bien ce que tu veux ?
A la base je pensais plutôt à une erreur comme celle générée par le model lorsqu'il manque un paramètre mais oui ça fonctionnerait aussi. Du coup est-il possible de récupérer les erreurs de l'objet request ou est-ce que je dois trouver un moyen de générer le message moi même? (En comparant les require et ce qui est reçu).
Car pour le moment j'arrive à intercepter l'exception et générer un message personnalisé
class Api::PostsController < ApplicationController
rescue_from ActionController::ParameterMissing , :with => :param_missing
#...
def param_missing
@params = params.to_json
render :json => '{"error": "The param is missing","param":' + @params + '}', status: :not_found
end
Mais je ne trouve pas comment récupérer le nom du paramètre posant problème
{
"error": "The param is missing",
"param": {
"title": "test",
"format": "json",
"controller": "api/posts",
"action": "create"
}
}
Effectivement, pourtant c'est logique que ce soit dans l'erreur... j'aurais du y penser ^^.
En tout cas merci beaucoup!
Bonne journée