2017-09-23 9 views
0

Bitte helfen Sie mir mit folgenden: Ich habe eine Reihe von Anwendungen und zugehörigen Aufzeichnungen.Ruby RestClient GET Anfrage mit Payload

app with id 1 has: record1, record2 and record3. 
app with id 2 has: record1 ... record1000 

Um Datensätze für App 1 herauszufiltern Im curl verwenden. Ich kann Datensätze mit folgendem Befehl erhalten:

curl -i -H "accept: application/json" -H "Content-type: application/json" -X GET -d '{ "filters": { "app_id":"1" }}' http://[rails_host]/v1/records?token=[api_token] 

Wie kann ich das gleiche tun, aber mit Ruby RestClient (gem ‚Rest-client‘ ‚1.7.2‘)

Um alle Datensätze erhalten ich das tun folgende:

RestClient.get("http://[rails_host]/v1/records?token=[api_token]", { :content_type => 'application/json', :accept => 'application/json'}) 

Das Problem ist, dass App-IDs nicht zurückgegeben werden, so kann ich nicht analysiert Antwort und Aufzeichnungen nehmen, die App-ID = 1 hat

Irgendwelche Ideen, wie kann ich Nutzlast in dem fi Restclient.get Filter löschen?

+0

einen Körper mit einem GET ist ein schlechtes Design. Technisch können Sie dies tun, aber um die Spezifikation zu erfüllen, sollte der Körper des GET in keiner Weise die Antwort beeinflussen (also sollte die gleiche Antwort unabhängig vom Körper zurückkommen). Darüber hinaus nehmen viele Leute (und somit auch Implementierungen) an, dass GET-Anfragen keinen wichtigen Körper haben können, so dass viele Implementierungen es nicht erlauben, einen Körper zu senden. Grundsätzlich: Erstellen Sie keine API, bei der GET Daten im Anfragetext benötigt/verwendet. – Joe

+0

Leider baue ich keine Anwendung. Momentan benutze ich das vorhandene und versuche, eine kontinuierliche Integrationslösung unter Verwendung der vorhandenen Funktionalität zu erstellen. Danke – Andriy

Antwort

1

Sie können in der Dokumentation sehen here, dass die einzigen hohen Helfer, die eine Nutzlast Argument sind POST, Patch- und PUT akzeptieren. Um eine GET-Anfrage macht eine Nutzlast verwenden, müssen Sie RestClient::Request.execute

Diese verwenden würde wie folgt aussehen:

RestClient::Request.execute(
    method: :get, 
    url:  "http://[rails_host]/v1/records?token=[api_token]", 
    payload: '{ "filters": { "app_id":"1" } }', 
    headers: { content_type: 'application/json', accept: 'application/json'} 
) 
+1

Super !! Funktioniert wie erwartet. Vielen Dank – Andriy

-1

Können Sie versuchen, die Daten in JSON zu senden?

data = { param1: 'one', nested: { param2: 'two' }}.to_json 
headers = { content_type: :json, accept: :json } 

RestClient.get("http://#{rails_host}/v1/records?token=#{api_token}", data, headers)