2016-06-26 7 views
1

Hallo Ich versuche Posting zu erstellen und Ausgabe APIElixir: Wie auf einer Rest-API (redmine) mit httpotion schreiben

def createIssue(issue) do 
    value = %{"project_id" => 1, "subject" => "Example", "priority_id" => 1, "tracker_id" => 1} 
    content = Poison.Encoder.encode(value, []) 
    HTTPotion.post("#{url}/issues.json", [body: "issue=#{content}" , basic_auth: auth()]) 
end 

Das Ergebnis des obigen Codes Redmine wird die folgende

Started POST "/issues.json" for 127.0.0.1 at 2016-06-26 11:47:25 +0200 
Processing by IssuesController#create as JSON 
Parameters: {"issue"=>"{\"tracker_id\":1,\"subject\":\"Example\",\"project_id\":1,\"priority_id\":1}"} 
Current user: admin (id=1) 

die richtige Antwort von redmine sollte so weit sein, wie ich folgendes verstehen

Parameters: {"issue"=>{"tracker_id":1,"subject": "Example","project_id":1,"priority_id":1}} 

Wer kann helfen? Danke

+0

Haben Sie diese API schon vorher aus einer anderen Sprache aufgerufen? Wenn ja, welchen Code hast du benutzt? – Dogbert

+0

Versuchen Sie, 'plug' als Abhängigkeit in Ihre' mix.exs' hinzuzufügen, falls Sie dies noch nicht getan haben, und probieren Sie diesen Code aus: https://gist.github.com/anonymous/e532956e00c9630b823fe4434cbe9dec Ich poste die Erklärung als antworte, wenn es für dich funktioniert. – Dogbert

+0

Danke Dogbert. Ich habe versucht, etwas ähnliches über Quote/Unquote zu tun. Dein Kern hat funktioniert! Ich werde es dir in meinem github-Repository gutschreiben und deine Erklärung als Antwort markieren, wenn du es postest. Danke –

Antwort

2

Das Problem ist nicht HTTPotion. Sie codieren den Knoten "Issue" nicht als JSON.

def createIssue(issue) do 
    content = Poison.encode!(%{"issue" => %{"project_id" => 1, "subject" => "Example", "priority_id" => 1, "tracker_id" => 1}}) 
    HTTPotion.post("#{url}/issues.json", [body: content, basic_auth: auth()]) 
end 
+0

Wenn das funktioniert, finde ich es seltsam, dass '" issue = # {json} "' zu '{" issue ": json}' dekodierte. Es sollte einen Fehler oder etwas ausgelöst haben, wenn es erwartet, dass der ganze Körper ein gültiger JSON ist. – Dogbert

+0

@Dogbert: es wirft keine Fehler –

+0

Meine Elixir-Code finden Sie hier [link] (https://github.com/wuatanabe/redelix) –