๐ GetConnect
์ด์ Flutter์ GetX์ ๋ํด ์์๋ณด์๊ณ , ์ค๋์ ๊ทธ์๋ฐ๋ฅธ API ํต์ ์ ํ๊ธฐ์ํด GetConnect์ ๋ํด ์์๋ณผ๊ฑฐ๋ค.
API ํต์ ?
์ฐ์ API ํต์ ์ด๋ ์น์ด๋ ์ฑ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด ํ๋ก ํธ ์๋์ ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ ๊ตํ์ด ํ์ํ๋ฐ ์ด๋ ์ฌ์ฉํ๋ ๋ฐฉ์์ API ํต์ ์ด๋ผ๊ณ ํ๋ค.
์ฝ๊ฒ ๋งํ๋ฉด ํด๋ผ์ด์ธํธ(์ฑ)๊ฐ ์๋ฒ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ฌ๋ผ or ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด๋ฌ๋ผ๊ณ ์์ฒญ(Request)ํ๊ณ , ์๋ฒ๊ฐ ๊ทธ์ ๋ํ ์๋ต(Response)์ ๋ณด๋ด์ฃผ๋ ๊ณผ์ ์ด๋ค.
API ํต์ ์ ํด๋ผ์ด์ธํธ๊ฐ ๋ด๋นํ๋ UI์ ์๋ฒ๊ฐ ๋ด๋นํ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ๋ค๋ฆฌ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
Flutter + GetX์ API ํต์
Flutter์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก http, dio ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ API ํต์ ์ ์ฒ๋ฆฌํ๋ค.
ํ์ง๋ง ์ฐ๋ฆฌ๋ ์ด์ GetX๋ฅผ ์ฌ์ฉํ์๊ธฐ ๋๋ฌธ์ GetX์์ ์ ๊ณตํ๋ GetConnect๋ฅผ ํตํด API ํต์ ์ ๊ด๋ฆฌํ ๊ฑฐ๋ค.
GetConnect
GetConnect๋ GetX์์ ์ ๊ณตํ๋ HTTP ํต์ ์ ์ฉ ํด๋์ค์ด๋ค.
UI (View)
โ
Controller (GetxController)
โ
Service / Repository
โ
API ํต์
์ฆ GetX๋ ์ฑ์ ์ ์ฒด ๊ตฌ์กฐ๋ฅผ ๋ด๋นํ๋ ๊ฑฐ๊ณ ,
GetConnect๋ ๊ทธ ์์์ API ํต์ ์ ๋ด๋นํ๋ค๋ ๊ฑฐ๋ค.
GetConnect ํน์ง
- GetX์ ์์ ํ ํตํฉ
- Get.put(), Get.find() ๊ทธ๋๋ก ์ฌ์ฉ๊ฐ๋ฅ
- Controller์ ์์ฐ์ค๋ฝ๊ฒ ์ฐ๊ฒฐ๋์ด ๊ตฌ์กฐ ์ผ๊ด์ฑ ์ ์ง
- ๋ณ๋์ ๋คํธ์ํฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด ์ฌ์ฉ๊ฐ๋ฅ
- GetX ํ๋๋ก ์ํ ๊ด๋ฆฌ + ๋ผ์ฐํ + API ํต์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ํ๋ก์ ํธ ์์กด์ฑ ๋จ์
- CRUD API ๊ตฌํ์ ์ ํฉ
- get, post, put, delete ๋ฉ์๋ ์ ๊ณต
- Controller์ ๊ตฌ์กฐ ๋ถ๋ฆฌ ์ฌ์
- Controller์์๋ ๋น์ฆ๋์ค ๋ก์ง๋ง ๋ด๋น
- ์ค์ HTTP ํต์ ์ GetConnect ๊ธฐ๋ฐ Service์์ ์ฒ๋ฆฌ
- ์ฝ๋ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์ ํฅ์
์์ ์ฝ๋
import 'package:get/get.dart';
class ApiService extends GetConnect {
@override
void onInit() {
httpClient.baseUrl = 'https://example.com/api';
super.onInit();
}
// GET: ๊ฒ์๊ธ ๋ชฉ๋ก ์กฐํ
Future<Response> fetchPosts() {
return get('/posts');
}
// POST: ๊ฒ์๊ธ ์์ฑ
Future<Response> createPost(String title) {
return post('/posts', {
'title': title,
});
}
}
์ฝ๋๋ฅผ ๋ณด๋ฉด extends GetConnect์ด๋ฐ์์ผ๋ก GetConnect๋ฅผ ์์๋ฐ์ HTTP ํต์ ์ ์ฉ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ,
baseUrl๋ง ์ง์ ํด๋๋ฉด ์ดํ์๋ endpoint๋ง ์์ฑํด์ฃผ๋ฉด ๋๋ค.
๋ํ get, post ๋ฉ์๋๋ก CRUD API๋ฅผ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์๋ค.