2017-09-23 3 views
0

S'il vous plaît aidez-moi avec ce qui suit: J'ai un certain nombre d'applications et dossiers associés.Ruby RestClient GET demande avec charge utile

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

Pour filtrer les enregistrements pour l'application 1 Im en utilisant curl. Je peux obtenir des enregistrements avec la commande suivante:

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] 

Comment puis-je faire la même chose mais avec rubis RESTClient (bijou « reste-client » « 1.7.2 »)

Pour obtenir tous les documents que je fais la suit:

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

Le problème est que ids app ne sont pas retournés donc je ne peux pas analyser la réponse et prendre des enregistrements qui a id app = 1

Toute idée comment puis-je ajouter la charge utile à Restclient.get pour fi ltre les disques?

+0

L'utilisation d'un corps avec un EEG est une mauvaise conception. Techniquement, vous pouvez le faire mais pour répondre à la spécification, le corps de l'EEG ne devrait en aucun cas influencer la réponse (donc la même réponse devrait revenir quel que soit le corps). En outre, beaucoup de personnes (et donc, les implémentations) supposent que les requêtes GET ne peuvent pas avoir un corps qui compte, donc de nombreuses implémentations ne vous permettront pas d'envoyer un corps. Fondamentalement: ne construisez pas une API où GET nécessite/utilise des données dans le corps de la requête. – Joe

+0

Malheureusement, je ne construis pas une application. Actuellement, Im en utilisant un existant et en essayant de créer une solution d'intégration continue en utilisant les fonctionnalités existantes. Merci – Andriy

Répondre

1

Vous pouvez voir dans la documentation here que les seules aides de haut niveau qui acceptent un argument de charge utile sont POST, PATCH, et PUT. Pour faire une requête GET en utilisant une charge utile, vous devrez utiliser RestClient::Request.execute

Cela ressemblerait à ceci:

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

Génial !! Fonctionne comme prévu Merci – Andriy

-1

Pouvez-vous essayer d'envoyer les données en JSON?

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)