Rest api with delphi » History » Version 1
Rodrigo Carvalho, 2011-10-26 22:24
| 1 | 1 | Rodrigo Carvalho | h1. Using the REST API with Delphi |
|---|---|---|---|
| 2 | |||
| 3 | Here are two simple procedures that demonstrates how to use the Redmine REST API with Delphi. This example uses "ICS component THttpCli":http://www.overbyte.be/frame_index.html?redirTo=/products/ics.html: |
||
| 4 | |||
| 5 | <pre><code class="delphi"> |
||
| 6 | //Creating an Issue |
||
| 7 | procedure AddIssue; |
||
| 8 | var |
||
| 9 | xmlStream : TMemoryStream; |
||
| 10 | tempArray : array[0..10000] of char; |
||
| 11 | xmlIssue : String; |
||
| 12 | apiAccessKey : String; |
||
| 13 | HttpClient : THttpCli; |
||
| 14 | begin |
||
| 15 | apiAccessKey := 'a1234567abcde12121a11a123456a12a12ab123ab'; ///Api user key example |
||
| 16 | xmlStream := TMemoryStream.Create; //Create the XML stream |
||
| 17 | |||
| 18 | //Create and set the Http Client component |
||
| 19 | HttpClient := THttpCli.Create(nil); |
||
| 20 | HttpClient.ContentTypePost := 'text/xml'; |
||
| 21 | HttpClient.URL:= 'http://localhost:3000/issues.xml?key='+apiAccessKey; |
||
| 22 | try |
||
| 23 | xmlIssue := |
||
| 24 | '<?xml version="1.0"?>' + |
||
| 25 | '<issue>' + |
||
| 26 | ' <project_id>1</project_id>'+ |
||
| 27 | ' <tracker_id>1</tracker_id>'+ |
||
| 28 | ' <status_id>1</status_id>'+ |
||
| 29 | ' <priority_id>1</priority_id>'+ |
||
| 30 | ' <author_id>1</author_id>'+ |
||
| 31 | ' <start_date>2011-10-09</start_date>'+ |
||
| 32 | ' <subject>Created in DELPHI</subject>'+ |
||
| 33 | ' <description>Issue created in DELPHI using Redmine REST API</description>'+ |
||
| 34 | ' <custom_fields type="array">' + // adding custom fields |
||
| 35 | ' <custom_field id="1">'+ |
||
| 36 | ' <value>12121212</value>'+ |
||
| 37 | ' </custom_field>'+ |
||
| 38 | ' <custom_field id="2">'+ |
||
| 39 | ' <value>2010-10-09</value>'+ |
||
| 40 | ' </custom_field>'+ |
||
| 41 | ' </custom_fields>'+ |
||
| 42 | '</issue>'; |
||
| 43 | |||
| 44 | // Fill the stream with the xmlIssue |
||
| 45 | FillChar( temparray, SizeOf( temparray ), #0 ); |
||
| 46 | strpcopy( temparray, xmlIssue ); |
||
| 47 | xmlStream.Write( temparray, length(xmlIssue) ); |
||
| 48 | xmlStream.Seek( 0, soFromBeginning); |
||
| 49 | |||
| 50 | // set the xml stream and post |
||
| 51 | HttpClient.SendStream:=xmlStream; |
||
| 52 | try |
||
| 53 | HttpClient.Post; |
||
| 54 | except |
||
| 55 | raise; |
||
| 56 | end; |
||
| 57 | finally |
||
| 58 | xmlStream.Free; |
||
| 59 | HttpClient.Free; |
||
| 60 | end; |
||
| 61 | end; |
||
| 62 | |||
| 63 | //Listing Issue |
||
| 64 | procedure GetIssue(issueId: String); |
||
| 65 | var |
||
| 66 | apiAccessKey: String; |
||
| 67 | HttpClient: THttpCli; |
||
| 68 | xmlIssue: TXMLDocument; |
||
| 69 | begin |
||
| 70 | Memo.Lines.Clear; //using TMemo to show the result |
||
| 71 | apiAccessKey := 'a1234567abcde12121a11a123456a12a12ab123ab'; //Api user key example |
||
| 72 | |||
| 73 | xmlIssue := TXMLDocument.Create(Self); //Creating XML document. Self = TForm |
||
| 74 | |||
| 75 | //Create and set the Http Client component |
||
| 76 | HttpClient := THttpCli.Create(nil); |
||
| 77 | HttpClient.ContentTypePost := 'text/xml'; |
||
| 78 | HttpClient.URL:= 'http://localhost:3000/issues/'+issueId+'.xml?key='+apiAccessKey; |
||
| 79 | |||
| 80 | HttpClient.RcvdStream := TStringStream.Create(''); //Create the Stream |
||
| 81 | try |
||
| 82 | try |
||
| 83 | //Get the Issue and show some properties in TMemo |
||
| 84 | HttpClient.Get; |
||
| 85 | xmlIssue.LoadFromStream(HttpClient.RcvdStream); |
||
| 86 | xmlIssue.Active := True; |
||
| 87 | |||
| 88 | Memo.Lines.Add('Id = ' + xmlIssue.DocumentElement.ChildNodes['id'].NodeValue); |
||
| 89 | Memo.Lines.Add('Project id = ' + xmlIssue.DocumentElement.ChildNodes['project'].AttributeNodes['id'].NodeValue); |
||
| 90 | Memo.Lines.Add('Project Name = ' + xmlIssue.DocumentElement.ChildNodes['project'].AttributeNodes['name'].NodeValue); |
||
| 91 | Memo.Lines.Add('Tracker id = ' + xmlIssue.DocumentElement.ChildNodes['tracker'].AttributeNodes['id'].NodeValue); |
||
| 92 | Memo.Lines.Add('Tracker name = ' + xmlIssue.DocumentElement.ChildNodes['tracker'].AttributeNodes['name'].NodeValue); |
||
| 93 | Except |
||
| 94 | raise; |
||
| 95 | end; |
||
| 96 | finally |
||
| 97 | HttpClient.Free; |
||
| 98 | xmlIssue.Free; |
||
| 99 | end; |
||
| 100 | end; |
||
| 101 | </pre></code> |