Ruby RestClient GET request cu sarcină utilă (Programare, Ruby, Rest Client)

Andriy a intrebat.

Vă rog să mă ajutați cu următoarele: Am un număr de aplicații și înregistrări asociate.

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

Pentru a filtra înregistrările pentru aplicația 1 Im folosind curl. Pot obține înregistrări cu următoarea comandă:

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]

Cum pot face același lucru, dar cu Ruby RestClient (gem ‘rest-client’ ‘1.7.2’).

Pentru a obține toate înregistrările, fac următorul lucru:

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

Problema este că ID-urile aplicațiilor nu sunt returnate, astfel încât nu pot analiza răspunsul și să iau înregistrările care au ID-ul aplicației = 1.

Aveți vreo idee despre cum pot adăuga sarcina utilă la Restclient.get pentru a filtra înregistrările?

Comentarii

  • Utilizarea unui corp cu un GET este un design prost. Din punct de vedere tehnic, puteți face acest lucru, dar pentru a respecta specificațiile, corpul GET nu trebuie să influențeze în niciun fel răspunsul (deci același răspuns trebuie să fie returnat indiferent de corp). În plus, multe persoane (și, prin urmare, implementări) presupun că cererile GET nu pot avea un corp care să conteze, astfel încât multe implementări nu vă vor permite să trimiteți un corp. Practic: nu construiți un API în care GET necesită/folosește date în corpul cererii. –  > Por Joe.
  • Din păcate, nu construiesc o aplicație. În prezent, folosesc una existentă și încerc să creez o soluție de integrare continuă folosind funcționalitatea existentă. Mulțumiri.  > Por Andriy.
1 răspunsuri
garythegoat

Puteți vedea în documentele aici că singurele ajutoare de nivel înalt care acceptă un argument de sarcină utilă sunt POST, PATCH și PUT. Pentru a face o cerere GET folosind un payload va trebui să utilizați RestClient::Request.execute

Acest lucru ar arăta astfel:

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'}
)