티스토리 뷰

======================================================

 안녕하세요 Doridori 입니다.

 바쁜건 둘째 치고 업무에 대한 고민이 많아 지는 시기 인듯 합니다. 

여기에 풀어 놓을 문제는 아닌 듯 하고 ...

어쨌든 일주일 내내 출장 갔다가 본사 갔다가 프로젝트 업무도 진행 하고 본사 업무도 진행 하고 하다 보니,

몸도 힘들고 마음도 힘든 시기 이기는 한데 그 와중에 유튜브 각 재고 있는걸 보면 저도 멀쩡한 사람은 아닌것 같기도 하고 ... 그렇습니다. ㅎ

업무를 하면서 재미 있는 내용이나 조금 더 깊게 알고 싶은 내용 위주로 진행 하고 있기는 한데 업무라는 것이 항상 신선한 것들이 나오는 걸 보면 재미 있는 듯 하기도 합니다.

소소한 것들에서 행복을 찾아보고 힘을 내보려고 합니다. 

그럼 좋은 일이 생기지 않을까요? ㅎ 

(조금 우울한 느낌의 글이 되었는데, 그 정도로 힘든 상황은 아닙니다. 걱정 안해주셔도 됩니다. ^^a)

 모두 화이팅 하십시오!!

※ 지난 강의에서 댓글로 알려주셔서 알게 되었는데 마이크를 바꾸고 한쪽으로만 녹음되는 현상이 발생하여 이번에 수정 하였습니다. 

한쪽으로만 소리가 나는 부분을 확인은 하였는데 제 PC 출력 부분만 모노로 바꿔서 저만 잘되는 줄 알고 있었네요. =0=a 

죄송합니다. m(_._)m

이번에 녹음 프로그램에서 설정 부분을 변경 하여 모노로 입력 되도록 수정 하였습니다. 

감사합니다. ^^

======================================================

 

70. Rest API (Client Program)

Source UI)

70. Rest API (Client Program) (UI).zip
0.06MB

 

Soruce 전체)

70. Rest API (Client Program).zip
0.07MB

 

교재)

70. Rest API (Client Program).pdf
0.19MB

 

 

 지난 시간 진행 했던 Rest API에서 Server Program을 만들면서 Client Program의 경우 구글 확장 프로그램 중 Talent API Tester라고 하는 Program을 사용 했는데 이번에 이 프로그램 같은 느낌으로 만들어 봤습니다. 

 설명의 경우 지난 강의 내용을 확인 하시면 될듯 하고 Client Program을 개발 하다가 응답 받는 부분이 필요해서 Server Program 부분에 Response 부분을 추가 하였습니다. 

Server Program 추가 Source)

1
2
3
4
5
6
7
8
// 추가
HttpListenerResponse response = context.Response;
 
response.StatusCode = (int)HttpStatusCode.OK;
response.StatusDescription = "Status OK";
 
// 69강 Source에 있는 부분으로 Response 보내기 전 Status Code와 Description을 전송 하는 부분 추가
context.Response.Close();  // Client에 응답을 보내고 연결을 닫음
cs

 

강의)

뭔가 요즘 영상을 찍을 때 버벅이는 부분이 있는데 예전에 비해서 일도 그렇고 환경도 그렇고 집중하기 어려운 상황이라 그런가 싶기도 하네요. 

조금 더 노력 해봐야 할듯 합니다. ^^a

 

Source)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace RestAPI_Client
{
    public partial class RestAPIClient_Main : Form
    {
        enum enMethodType
        {
            POST,
            GET,
            PUT,
            DELETE
        }
 
 
        public RestAPIClient_Main()
        {
            InitializeComponent();
        }
 
 
        #region UI Event
        /// <summary>
        /// 화면 Loading 시 화면 구성 초기화 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void RestAPIClient_Main_Load(object sender, EventArgs e)
        {
            foreach (enMethodType oMethodType in Enum.GetValues(typeof(enMethodType)))   // ※15강 캡슐화에서 사용
            {
                cboxMethodType.Items.Add(oMethodType.ToString());
                cboxMethodType.SelectedIndex = 0;
            }
            
        }
 
        /// <summary>
        /// 화면 제어 상태 변경
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cboxMethodType_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox cbox = sender as ComboBox;
 
            enMethodType eMethodType = fStringtoEnum(cboxMethodType.Text);
 
            switch (eMethodType)
            {
                case enMethodType.POST:
                case enMethodType.PUT:
                    tboxBody.Enabled = true;
                    break;
                case enMethodType.GET:
                case enMethodType.DELETE:
                    tboxBody.Enabled = false;
                    tboxBody.Text = string.Empty;
                    break;
                default:
                    break;
            }
        }
 
        private void btnSend_Click(object sender, EventArgs e)
        {
            fGetRestSend(fStringtoEnum(cboxMethodType.Text));
        }
        #endregion
 
 
 
        #region Inner Function
        /// <summary>
        /// Rest API Send
        /// </summary>
        /// <param name="eMethodType"></param>
        private async void fGetRestSend(enMethodType eMethodType)
        {
            string apiUrl = tboxServerSendURL.Text; // REST API의 엔드포인트 URL을 여기에 입력
 
            using (HttpClient client = new HttpClient())
            {
                try
                {
                    HttpResponseMessage response = null;
 
                    string postData = tboxBody.Text;
                    StringContent content = new StringContent(postData, System.Text.Encoding.UTF8, "application/json");
 
                    switch (eMethodType)
                    {
                        case enMethodType.POST:
                            response = await client.PostAsync(apiUrl, content);
                            break;
                        case enMethodType.GET:
                            response = await client.GetAsync($"{apiUrl}");
                            break;
                        case enMethodType.PUT:
                            response = await client.PutAsync(apiUrl, content);
                            break;
                        case enMethodType.DELETE:
                            response = await client.DeleteAsync($"{apiUrl}");
                            break;
                        default:
                            break;
                    }
 
                    string result = $"MethodType = {response.RequestMessage.Method}, StstusCode = {response.StatusCode}, StatusDesc = {response.ReasonPhrase}";
 
                    if (response.IsSuccessStatusCode)
                    {
                        string responseData = await response.Content.ReadAsStringAsync();
 
                        Log(enLogLevel.Info_L1, $"데이터 가져오기 성공");
                    }
                    else
                    {
                        Log(enLogLevel.Info_L1, $"API 요청 실패. 상태 코드: {response.StatusCode}");
                    }
 
                    Log(enLogLevel.Info_L1, $"{result}");
                }
                catch (Exception ex)
                {
                    Log(enLogLevel.Error, ex.Message);
                }
            }
        }
 
 
        private enMethodType fStringtoEnum(string enType)
        {
            enMethodType eMethodType;
 
            if(!Enum.TryParse<enMethodType>(enType, out eMethodType))
            {
                Log(enLogLevel.Error, $"Combox에 없는 값은 사용 할 수 없음 ({enType})");
            }
 
            return eMethodType;
        }
        #endregion
 
 
 
        #region Log Viewer  (기존 Source 재활용)
 
        int iMaxListCount = 12;
 
        // Log Level을 지정 할 Enum (44강 Tree View 참조)
        enum enLogLevel
        {
            Info_L1,
            Info_L2,
            Info_L3,
            Warning,
            Error,
        }
 
        private void Log(enLogLevel eLevel, string LogDesc)
        {
            this.Invoke(new Action(delegate ()
            {
                if (lboxLog.Items.Count >= iMaxListCount)
                {
                    lboxLog.Items.RemoveAt(iMaxListCount - 1);
                }
 
                DateTime dTime = DateTime.Now;
                string LogInfo = $"{dTime:yyyy-MM-dd hh:mm:ss.fff} [{eLevel.ToString()}] {LogDesc}";
                lboxLog.Items.Insert(0, LogInfo);
            }));
        }
 
        private void Log(DateTime dTime, enLogLevel eLevel, string LogDesc)
        {
            this.Invoke(new Action(delegate ()
            {
                if (lboxLog.Items.Count >= iMaxListCount)
                {
                    lboxLog.Items.RemoveAt(iMaxListCount - 1);
                }
 
                string LogInfo = $"{dTime:yyyy-MM-dd hh:mm:ss.fff} [{eLevel.ToString()}] {LogDesc}";
                lboxLog.Items.Insert(0, LogInfo);
            }));
        }
 
 
 
 
        #endregion
 
        
    }
}
 
cs
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함