[.Net] C#์์ Open API ๊ณ ์๋๋ก ๊ตํต๋ ์ ๋ณด ์ป๊ธฐ (์์ ํฌํจ)
์๊ฐ
์ ๋ ๋จธ์ ๋น์ ๋ถ์ผ์ ๊ทผ๋ฌดํ๊ณ ์๊ณ , ์ฃผ๋ก ๋น์ ๊ด๋ จ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค. ์ฌ์ค ๋งค์ผ ํ๋ ๊ฒ๋ง ๊ฐ๋ฐํ๋ค ๋ณด๋ ์ง๋ฃจํ๊ธฐ๋ ํ๊ณ , ๊ฐ๋ฐ์ ๋ฐฉํฅ์ฑ์ด ๋๋ฌด ํญ์ด ์ข์ ๋๋์ด ๋ค์์ต๋๋ค. ๊ทธ๋ฌ๋ค ๋ธ๋ก๊ทธ ํฌ์คํ
๋ฐ ์ทจ๋ฏธ๋ก ์ด๊ฒ์ ๊ฒ ๊ฐ๋ฐํ๋ค ๋ณด๋, ์ต๊ทผ์๋ Open API
๊น์ง ๊ฑด๋๋ฆฌ๊ฒ ๋์ต๋๋ค.
์์ ์๋ Open API
๋ผ๋ ๊ฐ REST API
๋ผ๋ ๋จ์ด๋ฅผ ๋ค์ด๋ณด๊ธด ํ์ง๋ง, ์ฌ์ฉํด๋ณผ ๊ธฐํ๋ ์๊ณ ์ด๋ป๊ฒ ํด์ผ ํ๋์ง๋ ๋ชฐ๋์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ ๋์ ํด๋ณด๋ ํฐ ์ด๋ ค์์ด ์๋๊ตฐ์. ์คํ๋ ค ๊ฐ์ด๋๋๋ก ์ฌ์ฉํ๋ฉด ๋งํ๋ ๊ฒ ์์ด ๋ฐ๋ก ๋์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๋ฒ ํฌ์คํ
์ ์ ์ฒ๋ผ ์ฒ์ Open API
๋ฅผ ๋ค๋ฃจ๋ ๋ถ๋ค์๊ฒ ์ข์ ๊ฐ์ด๋๊ฐ ๋๊ธธ ๋ฐ๋ผ๋ฉด์ ์์ฑํ์ต๋๋ค. ๋ณธ๋ฌธ์ ์์ ํ๋ก์ ํธ๋ Open API๋ฅผ ํ์ฉํ์ฌ ๊ณ ์๋๋ก ๊ตํต์๋ณด ํํฉ ์ ๋ณด๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค.
REST, REST API, Open API?
Open API
๋ฅผ ๋ค๋ค๋ณด๋ฉด์ ์์ฃผ ์ ํ๋ ๋จ์ด๊ฐ RESTful
๋ฐ REST API
์์ต๋๋ค. ์ธํฐ๋ท์ ๊ฒ์ํด๋ณด๋ฉด, ๊ฐ์ ์๋ฏธ๋ผ๋ ๊ธ๋ ์๊ณ ๊ฒฐ๊ตญ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ์์ด๋ผ๊ณ ํ๋๊ตฐ์.
์ํคํผ๋์์๋ REST๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๊ณ ์์ต๋๋ค.
REST(Representational State Transfer)๋ WWW(World Wide Web)๊ณผ ๊ฐ์ ๋ถ์ฐ ํ์ดํผ๋ฏธ๋์ด ์์คํ ์ ์ํ ์ํํธ์จ์ด ์ํคํ ์ฒ์ ํ ํ์์ ๋๋ค.
์ฆ, ์ด๋ ํ ์์(๋ฌธ์, ๋ฐ์ดํฐ ๋ฑ)์ ์ด๋ฆ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ดํฐ๋ ์ผ๋ฐ์ ์ผ๋ก JSON ๋๋ XML ํ์์ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
์๋ ์ ์ฝ๋ก๋ ๋๋ฌธ์ ๋ง์คํฌ ํ๊ท ํ์์ด ์ผ์ด๋ฌ์ ๋, ์ฝ๊ตญ๋ง๋ค ๋ง์คํฌ ๋ณด์ ์๋์ด ์ผ๋ง๋ ์๋์ง Open API๋ก ์ ๊ณตํ์๋๋ฐ์. ์ด๋ ๊ฒ ๊ตญ๊ฐ์์ ๋ณด์ ํ๊ณ ์๋ ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฐฉํ์ฌ ๊ตญ๋ฏผ๋ค์ด ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋ ๊ฒ์ด Open API์ ๋๋ค. ๋ฌผ๋ก ๊ธฐ์ ์์ ์ ๊ณตํ๊ธฐ๋ ํฉ๋๋ค.
๋ฐ๋ผ ํ๊ธฐ
์ฐ์ , ํ๊ตญ ๋๋ก๊ณต์ฌ์์ ์ ๊ณตํ๋ ๊ณ ์๋๋ก ๊ณต๊ณต๋ฐ์ดํฐ ํฌํธ ์ฌ์ดํธ๋ฅผ ์ ์ํฉ๋๋ค.
์ฌ๊ธฐ์ ๋์ฌ๊ฒจ๋ณผ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. HTTP GET
๊ณผ HTTP POST
๋ก ํธ์ถํ ์ ์๊ณ , ๊ฒ์ ๊ฒฐ๊ณผ๋ XML
๋๋ JSON
์
๋๋ค.
ํญ๋ชฉ๋ช | ๊ฐ |
Request URL | http://data.ex.co.kr/openapi/safeDriving/forecast |
ํธ์ถ ๋ฐฉ๋ฒ | HTTP GET, HTTP POST |
๊ฒ์ ๊ฒฐ๊ณผ ํฌ๋งท | XML, JSON |
๊ทธ๋ฆฌ๊ณ ์์ฒญ ๋ณ์๋ key
์ type
๋ ๊ฐ์ string
์ด ํ์ํฉ๋๋ค.
์์ฒญ ๋ณ์ | ๊ฐ | ์กฐ๊ฑด | ์ค๋ช |
key | string | ํ์ | ๋ฐ๊ธ๋ฐ์ ์ธ์ฆํค |
type | string | ํ์ | ๊ฒ์ ๊ฒฐ๊ณผ ํฌ๋งท |
ํ์ด์ง์ ํ๋จ์๋ ์์ ์คํํ๊ธฐ ๋ฒํผ์ด ์์ต๋๋ค.
key
๊ฐ ๊ฐ์ด test
์ด๋ฉด ๋ง ๊ทธ๋๋ก ํ
์คํธ ์ฉ์
๋๋ค. ๋์ค์ ์ค์ ์๋น์ค๋ฅผ ์ด์ํ๋ค๋ฉด ์ธ์ฆํค ๋ฐ๊ธ์ ์์ฒญํ๊ณ , ๊ทธ ํค๋ก ์
๋ ฅํด์ผ ํฉ๋๋ค. type
์ xml
๋๋ json
ํธํ ๊ฒ์ผ๋ก ์ ํํ๋ฉด ๋ฉ๋๋ค. ์ ํ๋ ํญ๋ชฉ์ ๋ฐ๋ผ URL์ด ์์ฑ๋๊ณ , ์ด URL์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ฉด ์ตํ๋จ์ ๋ฐ์ดํฐ๊ฐ ํ์ ๋ฉ๋๋ค.
์ด์ C# ํ๋ก์ ํธ๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. ์์ฃผ ๊ฐ๋จํ ํ์ธํ๊ธฐ ์ํด C# Console๋ก ๋ง๋ค๊ฒ ์ต๋๋ค.
ํ๋ก์ ํธ ์์ฑ ํ ๋๊ตฌ > NuGet ํจํค์ง ๊ด๋ฆฌ์ > ์๋ฃจ์ ์ฉ NuGet ํจํค์ง ๊ด๋ฆฌ... ๋ฉ๋ด๋ฅผ ํด๋ฆญํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Newtonsoft.Json์ ์ค์นํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๋์ namespace๋ฅผ ์ถ๊ฐํฉ๋๋ค.
using System.Diagnostics;
using System.IO;
using Newtonsoft.Json.Linq;
using System.Net;
using System.Net.Http;
๋ฐ์ดํฐ๋ฅผ ์์ฒญํ requestURL
์ ์ธ์ฆํค๊ฐ test
์ด๊ณ , ํ์
์ json
์
๋๋ค.
static string requestURL = "http://data.ex.co.kr/openapi/safeDriving/forecast?key=test&type=json";
ํด๋น ์ฃผ์์ json
ํ์
์ GET method
๋ฅผ ํธ์ถํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ต๋๋ค.
WebRequest request = WebRequest.Create(requestURL);
request.Method = "GET";
request.ContentType = "application/json";
using (WebResponse response = request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
string data = reader.ReadToEnd();
//...
}
๋ง์ง๋ง์ผ๋ก json ํ์ ์ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ํ์ฑํ์ฌ ์ํ๋ ์ ๋ณด๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
string data = reader.ReadToEnd();
var obj = JObject.Parse(data);
var list = obj["list"];
Console.WriteLine("============ List ============");
Console.WriteLine(obj);
Console.WriteLine("============ Item ============");
foreach (var item in list)
{
Console.WriteLine(string.Format("{0}: {1}", "๋ ์ง", item["sdate"]));
Console.WriteLine(string.Format("{0}: {1}", "์๊ฐ", item["stime"]));
Console.WriteLine(string.Format("{0}: {1}", "์ ๊ตญ ๊ตํต๋", item["cjunkook"]));
Console.WriteLine(string.Format("{0}: {1}", "์ง๋ฐฉ ๋ฐฉํฅ ๊ตํต๋", item["cjibangDir"]));
Console.WriteLine(string.Format("{0}: {1}", "์์ธ ๋ฐฉํฅ ๊ตํต๋", item["cseoulDir"]));
Console.WriteLine(string.Format("{0}: {1}", "์์ธ->๋์ ์์์๊ฐ", item["csudj"]));
Console.WriteLine(string.Format("{0}: {1}", "์์ธ->๋๊ตฌ ์์์๊ฐ", item["csudg"]));
Console.WriteLine(string.Format("{0}: {1}", "์์ธ->์ธ์ฐ ์์์๊ฐ", item["csuus"]));
Console.WriteLine(string.Format("{0}: {1}", "์์ธ->๋ถ์ฐ ์์์๊ฐ", item["csubs"]));
}
item["..."]์๋ ์๋์ ์ถ๋ ฅ ๋ณ์ ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค.
์์ฃผ ๊ฐ๋จํ์ฃ ? ์์ ์ฝ๋๋ ์ฒจ๋ถํ์ต๋๋ค.
'Programming > .Net' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[.Net] C# ํ๊ธ๊ณผ ์ปดํจํฐ hwp ๋ฌธ์ ๋ถ๋ฌ์ค๋ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ (์์ ํฌํจ)
[.Net] C# ํ๊ธ๊ณผ ์ปดํจํฐ hwp ๋ฌธ์ ๋ถ๋ฌ์ค๋ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ (์์ ํฌํจ)
2021.03.13 -
[.Net] C# WinForm์์ Metro UI(Modern UI) Framework ์ ์ฉํ๊ธฐ(์์ ํฌํจ)
[.Net] C# WinForm์์ Metro UI(Modern UI) Framework ์ ์ฉํ๊ธฐ(์์ ํฌํจ)
2021.03.07 -
[.NET] google ๋ฐ Naver (SMTP) ๋ฉ์ผ ๋ณด๋ด๊ธฐ (์์ ํฌํจ)
[.NET] google ๋ฐ Naver (SMTP) ๋ฉ์ผ ๋ณด๋ด๊ธฐ (์์ ํฌํจ)
2021.01.14 -
[.Net] 3'rd party library๋ฅผ C++/CLI๋ก C#์์ ์ฌ์ฉํ๊ธฐ ์ํ dll ๋ง๋ค๊ธฐ (์์ ํฌํจ)
[.Net] 3'rd party library๋ฅผ C++/CLI๋ก C#์์ ์ฌ์ฉํ๊ธฐ ์ํ dll ๋ง๋ค๊ธฐ (์์ ํฌํจ)
2020.02.29