본문 바로가기
Flutter/Flutter Programming

플러터 GetX에서 HTTP 요청 완벽 가이드 (초보자용)

by Maccrey 2024. 6. 7.
반응형
Flutter 앱 개발에서 네트워크 통신은 필수적인 기능입니다.
GetX는 간편하고 효율적인 HTTP 요청 기능을 제공하여 다양한 API를 쉽게 호출하고 데이터를 처리할 수 있도록 도와줍니다.

이 블로그 게시글에서는 Flutter GetX에서 HTTP 요청을 사용하는 방법에 대해 초보자가 쉽게 이해할 수 있도록 단계별로 안내합니다.

 

1. GetX HTTP 요청 기본 개념

  • HTTP 요청: 서버에 데이터를 요청하거나 전송하는 프로토콜입니다.
  • GET 요청: 서버로부터 데이터를 가져오는 요청입니다.
  • POST 요청: 서버에 데이터를 전송하는 요청입니다.
  • PUT 요청: 서버에 있는 데이터를 업데이트하는 요청입니다.
  • DELETE 요청: 서버에 있는 데이터를 삭제하는 요청입니다.

2. GetX HTTP 요청 사용법

import 'package:get/get.dart';

class MyController extends GetxController {
  var data = ''.obs;

  void fetchData() async {
    try {
      final response = await Get.get('https://jsonplaceholder.typicode.com/posts/1');
      if (response.statusCode == 200) {
        data = jsonDecode(response.body);
      } else {
        // 에러 처리
      }
    } catch (error) {
      // 에러 처리
    }
  }
}
 

설명

  • MyController 클래스에서 data Observable 변수를 사용하여 API 응답 데이터를 저장합니다.
  • fetchData() 메서드는 Get.get() 메서드를 사용하여 https://jsonplaceholder.typicode.com/posts/1 API를 GET 요청합니다.
  • 응답이 성공하면 response.body를 JSON 형식으로 변환하여 data 변수에 저장합니다.
  • 응답이 실패하거나 에러가 발생하면 에러 처리를 수행합니다.

3. GetX HTTP 요청 헤더 및 파라미터

 
import 'package:get/get.dart';

class MyController extends GetxController {
  var data = ''.obs;

  void fetchData() async {
    try {
      final response = await Get.get('https://jsonplaceholder.typicode.com/posts/1', headers: {'Authorization': 'Bearer YOUR_TOKEN'}, queryParameters: {'userId': '123'});
      if (response.statusCode == 200) {
        data = jsonDecode(response.body);
      } else {
        // 에러 처리
      }
    } catch (error) {
      // 에러 처리
    }
  }
}
 

설명

  • headers 매개변수를 사용하여 HTTP 요청 헤더를 설정할 수 있습니다.
  • queryParameters 매개변수를 사용하여 HTTP 요청 URL에 쿼리 파라미터를 추가할 수 있습니다.

4. GetX HTTP 요청 POST, PUT, DELETE:

import 'package:get/get.dart';

class MyController extends GetxController {
  // ... (GET 요청 코드)

  void postData() async {
    try {
      final response = await Get.post('https://jsonplaceholder.typicode.com/posts', body: {'title': 'My Post', 'body': 'This is my post content'});
      if (response.statusCode == 201) {
        // 성공 처리
      } else {
        // 에러 처리
      }
    } catch (error) {
      // 에러 처리
    }
  }

  void putData() async {
    try {
      final response = await Get.put('https://jsonplaceholder.typicode.com/posts/1', body: {'title': 'Updated Post', 'body': 'This is updated post content'});
      if (response.statusCode == 200) {
        // 성공 처리
      } else {
        // 에러 처리
      }
    } catch (error) {
      // 에러 처리
    }
  }

  void deleteData() async {
    try {
      final response = await Get.delete('https://jsonplaceholder.typicode.com/posts/1');
      if (response.statusCode == 200) {
        // 성공 처리
      } else {
        // 에러 처리
      }
    } catch (error) {
      // 에러 처리
    }
  }
}
 

설명

  • postData() 메서드는 Get.post() 메서드를 사용하여 POST 요청을 수행합니다.
  • body 매개변수를 사용하여 요청 데이터를 JSON 형식으로 전송합니다.
  • putData() 메서드는 Get.put() 메서드를 사용하여 PUT 요청을 수행합니다.
  • deleteData() 메서드는 Get.delete() 메서드를 사용하여 DELETE 요청을 수행합니다.

5. GetX HTTP 요청 응답 처리

import 'package:get/get.dart';

class MyController extends GetxController {
  // ... (이전 코드)

  void fetchData() async {
    try {
      final response = await Get.get('https://jsonplaceholder.typicode.com/posts/1');
      if (response.statusCode == 200) {
        final data = jsonDecode(response.body);
        // 성공 처리: 데이터를 사용하여 UI 업데이트 등을 수행
      } else {
        // 에러 처리
      }
    } catch (error) {
      // 에러 처리
    }
  }
}
 

설명

  • 응답이 성공하면 response.statusCode가 200으로 확인됩니다.
  • 응답 데이터는 response.body에서 JSON 형식으로 추출할 수 있습니다.
  • 추출한 데이터를 사용하여 UI 업데이트, 데이터 처리 등을 수행합니다.

6. GetX HTTP 요청 에러 처리

import 'package:get/get.dart';

class MyController extends GetxController {
  // ... (이전 코드)

  void fetchData() async {
    try {
      final response = await Get.get('https://jsonplaceholder.typicode.com/posts/1');
      if (response.statusCode == 200) {
        final data = jsonDecode(response.body);
        // 성공 처리: 데이터를 사용하여 UI 업데이트 등을 수행
      } else {
        // 에러 처리: 에러 메시지를 표시하거나 로그에 기록
        print('Error: ${response.statusCode}');
      }
    } catch (error) {
      // 예상치 못한 에러 처리
      print('Unexpected error: ${error}');
    }
  }
}
 

설명

  • 응답이 실패하면 response.statusCode가 200이 아닙니다.
  • 에러 메시지는 response.body에서 추출할 수도 있지만, 일반적으로 API 제공업체에서 제공하는 에러 메시지가 더 정확합니다.
  • 예상치 못한 에러는 catch 블록에서 처리합니다.

7. GetX HTTP 요청 추가 기능

  • 인터셉터: 요청 및 응답을 가로채서 처리할 수 있습니다. 예를 들어, 요청에 토큰을 추가하거나 응답 데이터를 로그에 기록하는 데 사용할 수 있습니다.
  • 파일 업로드 및 다운로드: Get.post()Get.put() 메서드에서 multipart/form-data 형식으로 파일을 업로드할 수 있으며, Get.download() 메서드를 사용하여 파일을 다운로드할 수 있습니다.
  • 쿠키 및 로컬 스토리지: Get.find<HttpClient>() 객체를 사용하여 쿠키 및 로컬 스토리지에 데이터를 저장하고 불러올 수 있습니다.
  • 타임아웃 및 재시도: Get.find<HttpClient>() 객체를 사용하여 요청 타임아웃을 설정하고 재시도 정책을 구성할 수 있습니다.

8. GetX HTTP 요청 활용 예시

  • 사용자 인증: 사용자 로그인 및 회원가입을 위한 API 호출
  • 데이터 조회 및 처리: 서버에서 데이터를 가져와 UI에 표시하거나 처리
  • 데이터 저장 및 업데이트: 서버에 데이터를 저장하거나 업데이트
  • 파일 업로드 및 다운로드: 사용자로부터 파일을 업로드하거나 서버에서 파일을 다운로드
  • 실시간 데이터 동기화: 서버로부터 실시간 데이터를 받아 UI를 업데이트

9. GetX HTTP 요청 장점

  • 간편함: GetX는 HTTP 요청을 간편하고 효율적으로 수행할 수 있도록 도와줍니다.
  • 유연성: 다양한 HTTP 요청 방법 (GET, POST, PUT, DELETE) 및 추가 기능을 지원합니다.
  • 타입 안전: GetX는 타입 안전 기능을 제공하여 코드 오류를 방지하고 안정적인 코드 작성을 도와줍니다.
  • 테스트 용이: GetX HTTP 요청 코드는 쉽게 테스트하여 기능을 정확하게 검증할 수 있습니다.

10. 추가 정보

11. 마무리

 

GetX는 Flutter 앱 개발에서 HTTP 요청을 간편하고 효율적으로 수행할 수 있도록 도와주는 강력한 기능을 제공합니다.

GetX를 사용하여 다양한 API를 호출하고 데이터를 처리하여 기능적인 앱을 개발할 수 있습니다.

이 블로그 게시글을 통해 Flutter GetX에서 HTTP 요청을 사용하는 방법에 대한 기본 개념, 추가 기능, 활용 예시, 장점 등을 이해하셨기를 바랍니다.

더 궁금한 점이나 알아보고 싶은 기능이 있다면 언제든지 댓글 남겨주세요!

 

수발가족을 위한 일기장 “나비일기장”

 

https://play.google.com/store/apps/details?id=com.maccrey.navi_diary_release

 

비공개테스트를 위한 20명의 테스터모집 앱 "테스터 쉐어"

 

https://play.google.com/store/apps/details?id=com.maccrey.tester_share_release

반응형