본문 바로가기

Flutter-플러터/플러터 공부

Flutter - API패키지 dio와 http 차이

반응형

dio와 http는 Dart 언어를 위한 패키지로, 둘 다 HTTP 요청을 다루는 라이브러리입니다. Flutter에서 웹 서비스와 통신할 때 사용됩니다. 그럼에도 불구하고 이 두 라이브러리에는 몇 가지 차이점이 있습니다.

  1. 기능의 풍부함:
    • dio: dio는 http보다 기능이 풍부하며, 요청 취소, FormData, Response 인터셉터, Global(전역) 인터셉터, 파일 업로드/다운로드 등과 같은 고급 기능을 제공합니다.
    • http: 기본적인 HTTP 클라이언트 기능을 제공합니다. dio보다 간단한 사용 사례에 적합합니다.
  2. 유연성:
    • dio: 맞춤 인터셉터를 추가할 수 있어 HTTP 요청 및 응답을 쉽게 수정하거나 검사할 수 있습니다.
    • http: 이런 유연성은 제공되지 않습니다.
  3. 에러 처리:
    • dio: 더 세밀한 에러 처리를 제공하며, 시간 초과이나 네트워크 에러 등 다양한 유형의 에러를 구별할 수 있습니다.
    • http: 기본적인 에러 처리만 제공합니다.
  4. 기타 기능:
    • dio: 요청을 취소하는 기능, FormData를 사용하여 multipart/form-data 요청을 보내는 기능 등의 추가적인 기능들을 제공합니다.
    • http: 이러한 추가 기능은 제공되지 않습니다.

결론적으로, 간단한 HTTP 요청이 필요한 경우 http 패키지를 사용할 수 있습니다. 그러나 더 복잡한 기능이나 높은 유연성이 필요한 경우 dio 패키지를 고려해볼 만합니다.

 

 


CRUD 예시

import 'dart:convert';
import 'package:http/http.dart' as http;

class HttpService {
  final String baseUrl = "https://example.com/api";

  Future<void> createData(String data) async {
    await http.post(Uri.parse("$baseUrl/create"), body: {"data": data});
  }

  Future<void> readData(String id) async {
    final response = await http.get(Uri.parse("$baseUrl/read/$id"));
    return jsonDecode(response.body);
  }

  Future<void> updateData(String id, String newData) async {
    await http.put(Uri.parse("$baseUrl/update/$id"), body: {"data": newData});
  }

  Future<void> deleteData(String id) async {
    await http.delete(Uri.parse("$baseUrl/delete/$id"));
  }
}
import 'package:dio/dio.dart';

class DioService {
  final Dio dio = Dio();
  final String baseUrl = "https://example.com/api";

  Future<void> createData(String data) async {
    await dio.post("$baseUrl/create", data: {"data": data});
  }

  Future<void> readData(String id) async {
    final response = await dio.get("$baseUrl/read/$id");
    return response.data;
  }

  Future<void> updateData(String id, String newData) async {
    await dio.put("$baseUrl/update/$id", data: {"data": newData});
  }

  Future<void> deleteData(String id) async {
    await dio.delete("$baseUrl/delete/$id");
  }
}

 

Future<void> fetchData() async {
  final response = await http.get(Uri.parse("https://example.com/api/data"));
  if (response.statusCode == 200) {
    return jsonDecode(response.body);
  } else {
    throw Exception('Failed to fetch data');
  }
}
Future<void> fetchData() async {
  final response = await dio.get("https://example.com/api/data");
  return response.data;
}

 

API 패키지에서 dio가 http 상위호환 더 다양한 기능을 제공한다. 

728x90
반응형

'Flutter-플러터 > 플러터 공부' 카테고리의 다른 글

Flutter m1,m2 pod install 펌  (1) 2023.10.05
Flutter 카카오맵 - 타다 참고  (0) 2023.09.26
Flutter- http 분기처리  (0) 2023.09.19
Flutter Stack 과 Container  (0) 2023.09.09
Flutter - Http get, post  (0) 2023.09.01