Mon but est d'adresser le "problème de mise à jour perdue" (voir http://www.w3.org/1999/04/Editing/) dans les opérations PUT. J'utilise sinatra, et en tant que client, j'utilise rest_client. Comment je peux vérifier si ça marche? Mon client renvoie toujours 200 code. Est-ce que j'utilise des arguments pour l'appeler correctement? (PUT travaille lui-même)sinatra rest-client etag
Code sinatra:
put '/players/:id' do |id|
etag 'something'
if Player[id].nil? then
halt 404
end
begin
data = JSON.parse(params[:data])
pl = Player[id]
pl.name = data['name']
pl.position = data['position']
if pl.save
"Resource modified."
else
status 412
redirect '/players'
end
rescue Sequel::DatabaseError
409 #Conflict - The request was unsuccessful due to a conflict in the state of the resource.
rescue Exception => e
400
puts e.message
end
end
invocation client:
player = {"name" => "John Smith", "position" => "def"}.to_json
RestClient.put('http://localhost:4567/players/1', {:data => player, :content_type => :json, :if_none_match => '"something"'}){ |response, request, result, &block|
p response.code.to_s + " " + response
}
J'ai essayé déjà de mettre: if_none_match => "quelque chose", j'ai essayé: if_match. Rien ne change. Comment puis-je mettre les en-têtes dans la requête RestClient? Comment faire pour obtenir sth différent de 200 statut? (c'est-à-dire 304 non modifié)?