Actions
redmine.org の Rest_api_with_delphi の日本語訳です。
Delphi での REST API の使用法¶
ここでは Delphi で Redmine REST API をどのように使用するかを示した 2 つの簡単なプロシージャを記述しています。 この例では ICS component THttpCli を使用しています。
//チケットの作成
procedure AddIssue;
var
xmlStream : TMemoryStream;
tempArray : array[0..10000] of char;
xmlIssue : String;
apiAccessKey : String;
HttpClient : THttpCli;
begin
apiAccessKey := 'a1234567abcde12121a11a123456a12a12ab123ab'; // サンプル用 API キー
xmlStream := TMemoryStream.Create; // XML stream の作成
// Http Client コンポーネントの作成とセット
HttpClient := THttpCli.Create(nil);
HttpClient.ContentTypePost := 'text/xml';
HttpClient.URL:= 'http://localhost:3000/issues.xml?key='+apiAccessKey;
try
xmlIssue :=
'<?xml version="1.0"?>' +
'<issue>' +
' <project_id>1</project_id>'+
' <tracker_id>1</tracker_id>'+
' <status_id>1</status_id>'+
' <priority_id>1</priority_id>'+
' <author_id>1</author_id>'+
' <start_date>2011-10-09</start_date>'+
' <subject>Created in DELPHI</subject>'+
' <description>Issue created in DELPHI using Redmine REST API</description>'+
' <custom_fields type="array">' + // adding custom fields
' <custom_field id="1">'+
' <value>12121212</value>'+
' </custom_field>'+
' <custom_field id="2">'+
' <value>2010-10-09</value>'+
' </custom_field>'+
' </custom_fields>'+
'</issue>';
// xmlIssue を stream に書き込む
FillChar( temparray, SizeOf( temparray ), #0 );
strpcopy( temparray, xmlIssue );
xmlStream.Write( temparray, length(xmlIssue) );
xmlStream.Seek( 0, soFromBeginning);
// xml stream のセットとデータの送信
HttpClient.SendStream:=xmlStream;
try
HttpClient.Post;
except
raise;
end;
finally
xmlStream.Free;
HttpClient.Free;
end;
end;
// チケット一覧
procedure GetIssue(issueId: String);
var
apiAccessKey: String;
HttpClient: THttpCli;
xmlIssue: TXMLDocument;
begin
Memo.Lines.Clear; // 結果を表示するために TMemo を使っている
apiAccessKey := 'a1234567abcde12121a11a123456a12a12ab123ab'; // サンプル用 API キー
xmlIssue := TXMLDocument.Create(Self); //Creating XML document. Self = TForm
// Http Client コンポーネントの作成とセット
HttpClient := THttpCli.Create(nil);
HttpClient.ContentTypePost := 'text/xml';
HttpClient.URL:= 'http://localhost:3000/issues/'+issueId+'.xml?key='+apiAccessKey;
HttpClient.RcvdStream := TStringStream.Create(''); // Stream の作成
try
try
// チケットを取得して、 TMemo に格納されたプロパティのいくつかを表示
HttpClient.Get;
xmlIssue.LoadFromStream(HttpClient.RcvdStream);
xmlIssue.Active := True;
Memo.Lines.Add('Id = ' + xmlIssue.DocumentElement.ChildNodes['id'].NodeValue);
Memo.Lines.Add('Project id = ' + xmlIssue.DocumentElement.ChildNodes['project'].AttributeNodes['id'].NodeValue);
Memo.Lines.Add('Project Name = ' + xmlIssue.DocumentElement.ChildNodes['project'].AttributeNodes['name'].NodeValue);
Memo.Lines.Add('Tracker id = ' + xmlIssue.DocumentElement.ChildNodes['tracker'].AttributeNodes['id'].NodeValue);
Memo.Lines.Add('Tracker name = ' + xmlIssue.DocumentElement.ChildNodes['tracker'].AttributeNodes['name'].NodeValue);
Except
raise;
end;
finally
HttpClient.Free;
xmlIssue.Free;
end;
end;
{{fnlist}}
Updated by Mitsuyoshi Yoshida almost 13 years ago · 1 revisions