[.Net] C# ๋ ๋๋ง์ธ REST API ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ(์์ ํฌํจ)
Redmine REST API
REST API
๋ HTTP ํ๋กํ ์ฝ์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ ์๋ฏธํ์ฃ . REST API
์ ๋ํ ์ข ๋ ์์ธํ ๋ด์ฉ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์๋ฉด ์ดํดํ๋๋ฐ ๋์์ด ๋ฉ๋๋ค.
[.Net] C#์์ Open API ๊ณ ์๋๋ก ๊ตํต๋ ์ ๋ณด ์ป๊ธฐ (์์ ํฌํจ)
๊ทธ๋ฐ๋ฐ ๋ ๋๋ง์ธ๋ REST API
๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, API๋ XML
๋ฐ JSON
ํ์ ๋ชจ๋ ์ง์ํฉ๋๋ค. ๊ทธ๋ผ ์ด๋ค ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
Redmine REST API ๋ชฉ๋ก
REST API๋ก ์ ๊ทผ ๊ฐ๋ฅํ ํญ๋ชฉ๊ณผ ํ์ฌ ์ ๊ณต๋๋ API์ ๊ฐ๋ฐ ์ํ๋ ์๋ ํ์ ๊ฐ์ต๋๋ค.
ํญ๋ชฉ | ์ํ | ์ค๋ช |
์ผ๊ฐ(Issues) | Stable | |
ํ๋ก์ ํธ(Projects) | Stable | |
ํ๋ก์ ํธ ๋ฉค๋ฒ๊ด๋ฆฌ(Project memberships) | Alpha | |
์ฌ์ฉ์(Users) | Stable | |
์๊ฐ ๋์ด(Time entries) | Stable | ์๊ฐ(๋๋ ๊ธฐ๊ฐ)์ผ๋ก ํํฐ๋ง |
๋ด์ค(News) | Prototype | index ์ ์ฉ ํ๋กํ ํ์ ๊ตฌํ |
์ฐ๊ด๋ ์ผ๊ฐ(Issue relations) | Alpha | |
๋ฒ์ (Versions) | Alpha | Wiki ํ์ด์ง์ ๋ฒ์ ์ ํ์ธ |
์ํค ํ์ด์ง(Wiki pages) | Alpha | |
๊ฒ์ ์์(Queries) | Alpha | |
์ฒจ๋ถ ํ์ผ(Attachments) | Beta | |
์ผ๊ฐ ์ํ(Issue statuses) | Alpha | |
์ถ์ (Trackers) | Alpha | *์ผ๊ฐ ๊ด๋์๋ฅผ ์๋ฏธํ๋ ๊ฒ ๊ฐ์ต๋๋ค |
์ด๊ฑฐ(Enumerations) | Alpha | ์กฐ๊ฑด์ ๋ฐ๋ฅธ ์ผ๊ฐ ๋ชฉ๋ก์ ๋ฐํํฉ๋๋ค |
์ญํ (Roles) | Alpha | |
๊ทธ๋ฃน(Groups) | Alpha | |
์ฌ์ฉ์ ์ ์ ํญ๋ชฉ(Custom fields) | Alpha | |
๊ฒ์(Search) | Alpha | |
ํ์ผ(Files) | Alpha | |
๋ด ๊ณ์ (My account) | Alpha |
๊ฐ ํญ๋ชฉ ๋ณ ์ํ์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. Stable์ด ๋จ์ด ๊ทธ๋๋ก ๊ฐ์ฅ ์์ ์ ์ด๋ผ๋ ์๋ฏธ์ด์ฃ .
์ํ | ์ค๋ช |
Stable | ๊ธฐ๋ฅ ๊ตฌํ์ด ์๋ฃ๋์ผ๋ฉฐ, ์์ผ๋ก ์ฃผ์ ๋ณ๊ฒฝ ๊ณํ์ด ์๋ ์ํ |
Beta | ์ผ๋ถ ๋ฒ๊ทธ ๋๋ ๋๋ฝ๋ ์ฌ์ํ ๊ธฐ๋ฅ์ด ์๋ ์ํ |
Alpha | ์ฃผ์ ๊ธฐ๋ฅ์ด ์์ผ๋ฉฐ ์ฌ์ฉ์์ ํผ๋๋ฐฑ์ด ํ์ํ ์ํ |
Prototype | ์์ฃผ ๊ฐ๋จํ ๊ตฌํ๋์ผ๋ฉฐ, ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ์ ์๋ ์ํ |
REST API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ค๋น ๋จ๊ณ
1. REST ์น ์๋น์ค ํ์ฑํํ๊ธฐ
Redmine REST API๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด API ํ์ฑํ ์ค์ ์ด ํ์ํฉ๋๋ค. ๊ด๋ฆฌ์ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ ํ ๊ด๋ฆฌ์ ์ค์ ๋ฉ๋ด๋ฅผ ๋ค์ด๊ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋์ ํ๋ฉด์์ REST ์น ์๋น์ค ํ์ฑํ ๋ฒํผ์ ์ฒดํฌํ๊ณ ์ ์ฅํฉ๋๋ค.
2. API ์ ๊ทผํค ํ์ธํ๊ธฐ
๋ก๊ทธ์ธ ํ ์ํ์์ ๋ด ๊ณ์ (My account) ๋ฉ๋ด๋ฅผ ํด๋ฆญํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ข์ธก์ API ์ ๊ทผํค๋ฅผ ํ์ธํฉ๋๋ค.
๋์ค์ ์ด ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋๋ง์ธ API์ ์ ๊ทผํ ์ ์์ต๋๋ค.
C#์์ Redmine REST API ์ ๊ทผํ๊ธฐ
ExamRedmineApi
์ด๋ฆ์ผ๋ก Windows Forms ์ฑ
ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
NuGet์์ redmine ์ ๊ฒ์ํ๊ณ redmine-api๋ฅผ ์ ํํ์ฌ ์ค์นํฉ๋๋ค. ๋ง์ฝ, NuGet์์ ์ ๊ณตํ๋ redmine api๋ฅผ ์ฌ์ฉํ๊ธธ ์์น ์๋ค๋ฉด ์ง์ REST API๋ฅผ ์ ์ดํ๋ฉด ๋ฉ๋๋ค. ๋ณธ๋ฌธ์์๋ ์ฝ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด NuGet์ ์ฌ์ฉํฉ๋๋ค.
Form UI๋ ๋ค์๊ณผ ๊ฐ์ด ๋ฒํผ๊ณผ ๋ฆฌ์คํธ ๋ทฐ๋ฅผ ๋ฐฐ์นํ์ต๋๋ค.
์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Redmine.Net.Api;
using Redmine.Net.Api.Types;
using System.Collections.Specialized;
namespace ExamRedmineApi
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void buttonRefresh_Click(object sender, EventArgs e)
{
try
{
//์กฐํํ ๋ ๋๋ง์ธ ํ๋ก์ ํธ์ ๋ฉ์ธ ์ฃผ์
string host = "";
//API ํค
string apiKey = "";
var manager = new RedmineManager(host, apiKey);
//์ผ๊ฐ ์ํ๊ฐ ๋ซํ์๋ ๊ฒ๋ง
var parameters = new NameValueCollection { { RedmineKeys.STATUS_ID, "closed" } };
//2022-01-1~2022-02-01 ์ฌ์ด ์กฐ๊ฑด
parameters.Add(RedmineKeys.CREATED_ON, "><2022-01-01|2022-02-01");
//์ผ๊ฐ ๋ชฉ๋ก ๋ฐ๊ธฐ
var issues = manager.GetObjects<Issue>(parameters);
foreach(var issue in issues)
{
ListViewItem item = new ListViewItem();
item.Text = issue.Id.ToString();
item.SubItems.Add(issue.Author.Name);
item.SubItems.Add(issue.Subject.ToString());
listViewIssues.Items.Add(item);
}
}
catch(Exception exc)
{
MessageBox.Show(exc.Message);
}
}
}
}
์ฝ๋๊ฐ ์์ฃผ ๊ฐ๋จํ์ฃ ? ์ค์ ๋์ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
parameters
์ ์ฌ๋ฌ ์กฐ๊ฑด์ ์ถ๊ฐํ์ฌ ํํฐ๋ง๋ ์๋ฃ๋ฅผ ์กฐํํ ์ ์์ต๋๋ค. NuGet Redmine API์ ๊ดํ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
https://github.com/zapadi/redmine-net-api/wiki
์๋์ ์ํ ์ฝ๋๋ ์ฐธ๊ณ ํ์ธ์.
'Programming > .Net' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[ASP.NET] C# ์๋๋ก์ง Linux Docker ์ฉ ์์ ์ ์๋น์ค ๋ง๋๋ ๋ฐฉ๋ฒ
[ASP.NET] C# ์๋๋ก์ง Linux Docker ์ฉ ์์ ์ ์๋น์ค ๋ง๋๋ ๋ฐฉ๋ฒ
2022.02.28 -
[ASP.NET] C# Windows Docker ์ฉ ์์ ์ ์๋น์ค ๋ง๋๋ ๋ฐฉ๋ฒ
[ASP.NET] C# Windows Docker ์ฉ ์์ ์ ์๋น์ค ๋ง๋๋ ๋ฐฉ๋ฒ
2022.02.15 -
[.Net] C# WinForm์์ ScottPlot์ผ๋ก ๊ทธ๋ํ, ์ฐจํธ ์ฝ๊ฒ ์ฌ์ฉํ๊ธฐ
[.Net] C# WinForm์์ ScottPlot์ผ๋ก ๊ทธ๋ํ, ์ฐจํธ ์ฝ๊ฒ ์ฌ์ฉํ๊ธฐ
2022.01.09 -
[.Net] WPF NodeNetwork ํ๋ก์ ํธ ํ๊ฒฝ ๊ตฌ์ฑ ๋ฐ Hello World ๋ง๋ค๊ธฐ(์์ ํฌํจ)
[.Net] WPF NodeNetwork ํ๋ก์ ํธ ํ๊ฒฝ ๊ตฌ์ฑ ๋ฐ Hello World ๋ง๋ค๊ธฐ(์์ ํฌํจ)
2021.12.27