[.Net] C# ๋ ๋๋ง์ธ REST API ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ(์์ ํฌํจ)
Redmine REST API
REST API
๋ HTTP ํ๋กํ ์ฝ์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ ์๋ฏธํ์ฃ . REST API
์ ๋ํ ์ข ๋ ์์ธํ ๋ด์ฉ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์๋ฉด ์ดํดํ๋๋ฐ ๋์์ด ๋ฉ๋๋ค.
[.Net] C#์์ Open API ๊ณ ์๋๋ก ๊ตํต๋ ์ ๋ณด ์ป๊ธฐ (์์ ํฌํจ)
[.Net] C#์์ Open API ๊ณ ์๋๋ก ๊ตํต๋ ์ ๋ณด ์ป๊ธฐ (์์ ํฌํจ)
์๊ฐ ์ ๋ ๋จธ์ ๋น์ ๋ถ์ผ์ ๊ทผ๋ฌดํ๊ณ ์๊ณ , ์ฃผ๋ก ๋น์ ๊ด๋ จ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค. ์ฌ์ค ๋งค์ผ ํ๋ ๊ฒ๋ง ๊ฐ๋ฐํ๋ค ๋ณด๋ ์ง๋ฃจํ๊ธฐ๋ ํ๊ณ , ๊ฐ๋ฐ์ ๋ฐฉํฅ์ฑ์ด ๋๋ฌด ํญ์ด ์ข์ ๋๋์ด ๋ค์
luckygg.tistory.com
๊ทธ๋ฐ๋ฐ ๋ ๋๋ง์ธ๋ 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
GitHub - zapadi/redmine-net-api: .Net API for Redmine bug/task management systems.
.Net API for Redmine bug/task management systems. Contribute to zapadi/redmine-net-api development by creating an account on GitHub.
github.com
์๋์ ์ํ ์ฝ๋๋ ์ฐธ๊ณ ํ์ธ์.
'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
๋๊ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.