2016-06-24 4 views
2

Mir scheint etwas Grundlegendes zu fehlen, da ich nicht weiß, wie man einen eingehenden HTTP-Post erfasst und dann bearbeitet. Ich bin ein C/C++ - Entwickler, der zum ersten Mal Ruby lernt und ich habe noch nie mit Web-Inhalten in meinem Leben zu tun gehabt.Ruby - Eingehenden HTTP POST behandeln?

ich mein ersten Slack Webhook Schreiben und schlaff wird die Daten ähnlich wie dies zu meinem Webserver senden:

token=ZLAmT1sKurm2KwvmYDR9hbiV 
team_id=T0001 
team_domain=example 
channel_id=C2147483705 
channel_name=test 
user_id=U2147483697 
user_name=Steve 
command=/weather 
text=94070 
response_url=https://hooks.slack.com/commands/1234/5678 

Ich habe keine Ahnung, wie man diese POST-Anfrage zu akzeptieren, und es mit meiner Bewerbung sendet für wird bearbeitet.

Ich nehme an, es ist vergleichbar mit der Handhabung argv und argc für eine Terminal-Anwendung, aber ich stecke fest die ersten Zeilen schreiben.

Ich habe nach einer Lösung gesucht, aber es scheint, als ob ich die falschen Fragen stelle.

ich derzeit ein Puma/Sinatra Webserver auf Heroku laufen haben, mit dem procfile enthält:

web: bundle exec puma -p $PORT (. Ich habe auch keine Ahnung, welche Port zugeordnet wird)

+0

Ich habe nie versucht das, aber diese Parameter sind in der Regel innerhalb ** ** recvmsg im HTTP-Header übergeben. Sehen Sie sich dies an: http://stackoverflow.com/questions/37823161/ruby-tcpserver-strange-behavior-in-writing-to-client –

Antwort

1

Ähnlich this answer, Sinatra bietet ein DSL, um POST-Anfragen zu akzeptieren. Innerhalb des Blocks sind die Daten im Hash-Code params zugänglich. So etwas wie

post '/my_endpoint' do 
    content_type :json 
    @team_id = params[:team_id] 
    res = do_stuff_with_channel_id params[:channel_id] # passing the value to a custom method example 
    {my_response: res}.to_json #simple example of returning JSON in response 
end 

Sinatra Docs on routing

HTH